微服务拆分原则 我们这里讨论的基于 SOA 原理 1. 垂直拆分,确定服务边界 以业务模型切入,将系统拆分成多个服务 考虑未来功能,模块数量上的增长,以不同的粒度拆分成子服务 举例: 根据用户拆分 功能枚举:注册,登录,用户信息修改,以及用户服横向扩展 微服务:用户数据服,用户逻辑处理服,路由服,用户账管服 2. 单一职责 尽量保证服务的单一原则,即一个服务只处理与服务相关的请求 举例:IM 产品中用户与用户聊天数据 微服务:用户数据服,用户聊天数据服 3. 水平扩展 业界内对可扩展系统架构设计有一个朴素的概念:通过加机器就可以解决容量和可用性问题 俩个问题 面对性能与容量的问题,简单粗暴的方式就增加机器 面对功能与模块数量上的增长带来的系统复杂性问题,即上述所属的垂直拆分服务的粒度问题 水平扩展的基础: 数据处理与数据存储分离,即抽离逻辑服,数据服 为数据服提供一套合理、完善的路由算法,即路由服 4. 数据整合 由于数据被持久化到不同的目标服,可能会涉及到数据整合 这里有 2 种方案 对客户端友好,抽离一个逻辑服,对外是客户端的入口,对内是数据整合的地方,将请求所需的各个服的数据打包整合,一起转发给客户端 对服务器友好,仅转发核心数据给客户端,其他数据交给客户端自己来取 举例 如图 王者荣耀的匹配界面,这里最重要的是告诉玩家,匹配成功了,进入倒计时了 至于头像,延迟 1-2s 刷新,对用户来说,体验并不会差到哪里去,但是对服务器来说就非常友好,因为匹配服只需告诉客户端匹配的结果,至于用户的信息,是客户端再找服务器读取的