微服务 在 Boss 的应用

目的

  • 减少复杂的业务, 限制业务边界
  • 定制化容易操作 和 定制化 可以基于版本的基线
  • 监控各个端口, API 影响是可控的
  • 水平扩展
  • 测试方便

标准指标

  • 服务是自治的
  • 服务的范围不大不小
  • 服务接口是幂等
  • 独立开发, 独立部署
  • 服务接口无状态性
  • 各部分数据做到最终一致性

具体步骤和里程碑

  • (must) 认证服务器需要提前
  • (must) 前后端代码进行分离
  • (must) 负载均衡 session 需要外部处理
  • (must) 后端代码模块直接切分
  • (must) 各个模块直接的耦合, 尽量使用异步的方式进行沟通
  • (must) 引入 界限上下文 的概念, 让每个模块都控制在一定的范围内
  • (must) 服务注册和发现
  • (must) UnitTest 的引入
  • 每个模块独立的数据库
  • 规范到每个模块的负责人
  • (must) 开发时候 每个模块的管理 和 部署
  • 优化每个模块, 引入 读写模型 的 分离
  • 监控不同的模块

步骤的分解

(must) 认证服务器需要提前

需要在 nginx 后进行 CAS 的验证, 并且验证的信息是会放在session 里面的? 这个的话, 好像有点问题, 因为session 已经是放在 缓存进行保存了, 需要咨询 劲飞。已经咨询过劲飞了, 可能验证的模块是当做是公用的模块, 同时 Session 是做到无状态, 下次做灰度测试的时候就会比较方便。 但是需要同时考虑到微信, 手机登录等各种操作, 做到统一性。

(must) 前后端代码进行分离

需要做到前后端人员能够快速进行开发。另外一个问题: 如何做到前端都可以做到分到模块来进行限制呢?

(must) 负载均衡 session 需要外部处理

直接调整 nginx 配置, 直接共享Session

(must) 后端代码模块直接切割

重中之重, 先拿一个 Customer 的模块 (这个模块选的有点大, 但是在实践过程中, 不断的缩小模块的范围, 让服务的切割, 不大不小, 刚好满足服务的界限, 而且考虑到人员的维护性; 或者拿 Customer 评价 这个模块) 进行验证。 这个涉及到下面的几个方面

**短期目标: **

  1. 直接拆分模块, 把 Customer 的模块 代码都独立出来, 依赖于原系统
  2. 对于 Customer 的模块, 对外围引用的模块, 界限上下文 必须要清晰, 分清晰 CoreDomain 和 辅助类型的Domain, 辅助类型的Domain 没有独立的表, 仅仅是 利用接口 获取到 的 ValueObject
  3. 对于 其他引用到 Customer模块的, 引入 因为 customer Domain 引发的 辅助型的 Domain, 没有独立的表, 仅仅是一个 ValueObject, 其他模块不能 直接import Customer 模块的类
  4. 还是使用原来的获取接口(直接调用方法
  5. 模块分出来后, 就进行自己的版本基线控制

短期目标 具体步骤目标[http://www.jianshu.com/p/6b4ddd8b3bfb]

**中期目标: **

  1. 接口使用到 RPC 的方式来做到, 获取到 的 ValueObject
  2. 分离公用的第三方的库, 让 Customer模块 依赖于公用的库
  3. 分割模块后, 读取数据 和 业务 之间的区别?
  4. 如果读取是多个表的数据的话, 应该是如何去处理
  5. 业务 和 门面模式控制的业务, 应该是如何去分开

最终目标:

  1. 直接拆分模块, 把 Customer 的模块 代码都独立出来, 只依赖于公用类库
  2. 对于 Customer 的模块, 对外围引用的模块, 界限上下文 必须要清晰, 引入辅助类型的Domain, 辅助类型的Domain会有自己存储结构。
  3. 对于 其他引用到 Customer模块的, 引入 因为 customer Domain 引发的 辅助型的 Domain
  4. 使用到 异步更新 和 订阅消息的方式来更新

(must) 各个模块实现弱耦合, 尽量使用异步的方式进行

  1. 正常的业务流程, 使用 队列的方式进行交互
  2. 辅助性Domain属性的更新, 使用到 订阅者方式进行更新
  3. CoreDomain的属性的更新, 如果是其他模块引起的, 都是需要订阅者方式进行更新

这需要等 前面的 代码模块的切割 才可以比较好的实现。

(must) 引入 界限上下文 的概念, 让每个模块都控制在一定的范围内

(must) 服务注册和发现

使用 SpringBoot 和 ZooKeeper 的方式来做到服务的注册和管理

(must) UnitTest 的引入

对单独的模块可以进行 UnitTest 的验证, 做到每个模块快速进行自动化测试

每个模块独立的数据存储模块

有可能不同的模块是 使用不同的数据库等。

规范到每个模块的负责人

人员只负责自己的模块, 看不到别人的模块, 就可以限制出错的范围, 每次修改都是有信心的。

(must) 开发时候 每个模块的管理 和 部署

后端代码模块直接切割 短期目标

依赖项目, 还是整一个 War 的进行部署

后端代码模块直接切割 长期目标

利用到 Spring 和 ZooKeeper, 分离的方式进行部署

优化每个模块, 引入 读写模型 的 分离

监控不同的模块

安全 - 对外的白名单 nginx

持续化集成和交付

使用DDD的概念对整个模块内部代码进行整理

你可能感兴趣的:(微服务 在 Boss 的应用)