框架设计杂谈(二)

发布时间 2023-06-02 12:55:28作者: 明志德道

互联网架构的发展之路

互联网架构的发展可以分为以下几个阶段:

1. 单一服务器架构

早期互联网的架构是基于单一服务器的,这时一个服务器承载着所有的网站功能,包括存储和处理数据、提供服务等。这种架构仅适用于小型网站,对于大型网站来说,单一服务器容易出现性能问题,无法满足高并发的需求。

2. 分布式架构

分布式架构是一种将网站的不同功能分散到不同服务器上的架构,每个服务器可以处理不同的任务,可以根据需求动态增加或减少服务器。通过分布式架构,可以有效地解决性能问题和扩展性问题,提高网站的可靠性和稳定性。

3. 微服务架构

微服务架构是一种将网站的单一应用拆分成多个小型的、自治的服务,每个服务都可以独立开发、部署和运行。这种架构可以使网站更加灵活和容错,提高开发效率,同时也会增加复杂度和管理成本。

4. 无服务器架构

无服务器架构是一种将网站的应用逻辑和数据处理都转移到云端提供商管理的平台上,这种架构将开发工作重心转移到了业务逻辑的编写和部署上,同时也降低了运维成本。通过无服务器架构,可以更好地实现弹性伸缩、高可用性和低延迟的要求,是当前互联网架构的主流方向之一。 总体来说,互联网架构的发展是一步步朝着更加分布式、弹性、可靠和高效的方向发展的。

多应用多服务下的统一鉴权

在多应用多服务下,需要实现统一鉴权来控制用户在不同应用、服务之间的访问权限。以下是常见的实现方式:

1. 基于 API 网关的认证鉴权:API 网关是多个服务的入口,通过统一鉴权中心对请求进行认证和鉴权,控制用户访问不同服务的权限。具体操作包括在 API 网关中实现 OAuth2.、OpenID 等授权认证方式,将认证信息传递给后续的服务实现鉴权。

2. 基于 token 的认证:用户在登录一个应用后,该应用将颁发一个 token,其他应用通过 token 与该应用进行通信,该应用根据 token 进行认证和鉴权。这种方式需要一个统一的 token 管理器来管理生成和验证 token。

3. 基于单点登录的认证鉴权:用户登录后,可以在所有应用中使用,有效期内不用重新登录。这种方式下需要将登录信息保存在一个统一的认证中心,其他应用通过认证中心进行认证和鉴权。

4. 基于代理的认证鉴权:认证中心通过代理服务向下传递请求,并完成认证和授权。具体操作包括通过代理服务将请求下发给对应的服务,代理服务与认证中心进行交互,完成鉴权认证,并返回给原应用。 总之,在多个应用、服务下实现统一鉴权需要一些基于加密算法的身份验证方法,同时需要一个统一鉴权中心来管理用户的认证信息,并为各个应用、服务提供鉴权服务。多应用多服务的都处理通用问题,并提供基于相同鉴权和认证方法的统一接口。

框架中实现多应用级别的授权实践

在框架中实现多应用级别的授权通常分为以下几个步骤:

1. 确定应用的权限控制模型:多应用的授权模型需要更高级别的权限控制,需要先确定应用之间的授权关系和授权策略,建立一个统一的授权模型。

2. 实现应用级别的授权服务:建立一个应用级别的授权中心或服务,用于管理所有应用的授权信息,包括用户、角色、权限、资源等;并提供相应的授权接口给各个应用使用。

3. 集成应用级别的授权服务:各个应用在进行用户鉴权时,先到授权中心进行认证和授权,获取相应的 token,之后就可以在应用中根据 token 进行权限验证和访问控制。授权中心可以使用 OAuth2、OpenID 等实现单点登录和授权服务。

4. 实现前端授权校验:前端在访问应用时,需要进行鉴权校验,一般使用 JWT 或其他自定义的 token 进行鉴权,从而保证请求的合法性和安全性。

5. 实现后端权限验证:在后端应用中,需要利用授权中心提供的 API 进行权限验证和鉴权。一般通过 AOP 方式实现,根据用户的角色和权限进行验证,限制用户对资源的访问。

总之,在多应用场景下实现授权需要建立一个真正的授权中心,对用户、角色、权限等进行统一管理,利用 OAuth2、OpenID 等协议实现安全的单点登录和授权服务。在具体应用中,需要根据授权中心提供的鉴权接口和 token 进行权限验证和访问控制,从而保证系统安全和稳定。

框架实现复杂可配置数据授权实践

复杂可配置数据授权实践通常需要一个灵活的框架来实现。下面是一个基于RBAC模型实现的框架示例:

1.用户管理

在该框架中,用户是一个基本对象,其包含了基本信息、角色及权限信息等。在实现过程中,我们可以使用数据库来存储用户信息,使用ORM框架来管理用户实体对象。同时,我们也需要实现一些常用的用户管理功能,如添加、删除、编辑用户等。

2.角色管理

角色是一个用于描述用户权限的集合,可以包含多个权限。在该框架中,我们需要实现角色管理功能,包括添加、删除、编辑角色等。同时,我们还需要实现角色与权限之间的管理,如添加、删除权限。

3.权限管理

权限是我们授权的基本单位,可以描述某种资源的访问规则和限制条件。在该框架中,我们可以使用数据库来管理权限信息,使用ORM框架来管理权限实体对象。同时,我们需要实现一些常用的权限管理功能,如添加、删除、编辑权限等。

4.授权管理

授权管理功能是该框架的核心功能之一,它负责管理用户的访问权限。在实现过程中,我们需要考虑到复杂授权规则的实现,如基于组织架构、基于资源类型、基于用户属性等多种方式进行授权。同时,为了满足不同业务场景的需求,我们也需要提供灵活的授权规则配置选项。

5.自定义扩展

在具体应用场景中,可能有一些自定义需求需要实现,例如基于角色的数据范围控制、基于自定义标签的访问控制等。为了支持这些需求,我们需要提供一些自定义扩展选项。

通过以上框架实现,我们可以构建一个灵活、易扩展的数据授权系统,满足复杂场景下的数据授权需求。

框架中如何实现多租户

多租户是指在一个系统中多个用户或组织可以共用系统资源,但是彼此之间具有强烈的数据隔离。为了实现多租户,需要在系统架构和代码实现上进行一些调整。

1. 数据隔离

不同租户的数据要进行隔离,避免租户之间的数据互相干扰。这可以通过以下方式实现:

- 独立的数据库:每个租户拥有自己的数据库,租户之间的数据不会混淆;

- 表分片或列分离:通过在表中增加一个或多个字段来区分不同的租户,查询时只返回当前租户的数据;

- 数据库视图:使用数据库视图来实现基于租户的数据访问控制,只允许访问当前租户的数据。

2. 系统架构 系统架构应该支持多租户,需要评估以下基础设施:

- 负载均衡:将不同租户的请求分配到不同的应用服务器上;

- 集群:保证系统的高可用性,同时提高系统的扩展性和吞吐量;

- 安全:强制执行访问控制,确保不同租户之间的数据安全;

- 日志和监控:记录每个租户的活动并监控系统性能,为租户提供更好的服务。

3. 租户识别 在系统中识别不同的租户,以便在系统中实现多租户。这可以通过以下方式实现:

- URL参数或子域名:根据URL参数或子域名来识别不同的租户;

- HTTP头:使用HTTP头来包含租户信息;

- 用户身份验证:根据用户身份验证信息来识别不同的租户;

- 其他自定义机制:将租户信息与会话或cookie关联。

4. 代码实现 通过代码实现多租户,需要在以下方面进行更新:

- 数据访问:在访问数据库时,通过加入租户标识来过滤数据,并确保在操作数据时将其归属于当前租户;

- 认证和授权:根据不同的租户提供不同的认证和授权策略,以确保只有授权用户可以访问其相应的数据;

- 初始化和配置:根据租户的不同需要提供不同的初始化和配置,为租户提供个性化的服务。

综上所述,实现多租户需要在系统架构和代码实现上进行相应的调整和变更,以确保不同租户之间的数据隔离,为租户提供定制化的服务。

前后端分离项目,如何统计在线用户及时长

前后端分离项目中,要统计在线用户及时长可以采用以下几种方法:

1. 通过前端记录用户状态:前端记录用户登录状态,每隔一段时间通过 ajax 请求更新服务器上的用户状态,根据用户最后一次操作时间来判断用户在线时长。

2. 通过浏览器窗口事件:当用户打开网站时,前端通过监听浏览器窗口事件(如窗口关闭、刷新、离开等),向服务器发送请求,记录用户状态及在线时长。

3. 使用 WebSocket 技术:WebSocket 是一种双向通信协议,可以不断向服务器发送心跳包,服务器根据收到的心跳包来判断用户是否在线,同时可以记录用户在线时长。

4. 使用定时器定时请求服务器:前端通过定时器定时向服务器发送请求,服务器记录用户状态及在线时长。

总的来说,以上几种方法都需要前端和后端共同实现,需要注意的是,要确保用户不活动时不影响在线时长的统计,同时要避免服务端压力太大。