Skip to content

Latest commit

 

History

History
39 lines (30 loc) · 2 KB

微服务拆分.md

File metadata and controls

39 lines (30 loc) · 2 KB

微服务拆分原则

  • 我们这里讨论的基于 SOA 原理

1. 垂直拆分,确定服务边界

  • 以业务模型切入,将系统拆分成多个服务
  • 考虑未来功能,模块数量上的增长,以不同的粒度拆分成子服务
  • 举例: 根据用户拆分
    • 功能枚举:注册,登录,用户信息修改,以及用户服横向扩展
    • 微服务:用户数据服,用户逻辑处理服,路由服,用户账管服

2. 单一职责

  • 尽量保证服务的单一原则,即一个服务只处理与服务相关的请求
  • 举例:IM 产品中用户与用户聊天数据
  • 微服务:用户数据服,用户聊天数据服

3. 水平扩展

  • 业界内对可扩展系统架构设计有一个朴素的概念:通过加机器就可以解决容量和可用性问题
  • 俩个问题
    • 面对性能与容量的问题,简单粗暴的方式就增加机器
    • 面对功能与模块数量上的增长带来的系统复杂性问题,即上述所属的垂直拆分服务的粒度问题
  • 水平扩展的基础:
    • 数据处理与数据存储分离,即抽离逻辑服,数据服
    • 为数据服提供一套合理、完善的路由算法,即路由服

4. 数据整合

  • 由于数据被持久化到不同的目标服,可能会涉及到数据整合
  • 这里有 2 种方案
    • 对客户端友好,抽离一个逻辑服,对外是客户端的入口,对内是数据整合的地方,将请求所需的各个服的数据打包整合,一起转发给客户端
    • 对服务器友好,仅转发核心数据给客户端,其他数据交给客户端自己来取
  • 举例
    • 如图
    • 王者荣耀匹配图
    • 王者荣耀的匹配界面,这里最重要的是告诉玩家,匹配成功了,进入倒计时了
    • 至于头像,延迟 1-2s 刷新,对用户来说,体验并不会差到哪里去,但是对服务器来说就非常友好,因为匹配服只需告诉客户端匹配的结果,至于用户的信息,是客户端再找服务器读取的