这几天在看Dubbo的一套分布式服务架构的视频,里面是怎么改造传统服务,结合各种中间件,搭建集群,采用分库分表等骚操作来完成一套企业高可用,高性能,高并发的项目架构。看到一大半的时候,发现自己实在是搭建不起来了,就先放弃了-.-!!,怎么改造搭建就不说了,总结一下分布式服务的服务化吧。
分布式服务子系统:
- 服务化的 目标:
1) 将系统中独立的业务模块抽取出来,按业务的独立性进行垂直划分,抽象出基础层(这个垂直切分大家想一下数据库的行和列,做一下类比。行数据是多个属性的集合体,复杂,类比一个项目中包含了所有模块;而列数据是单个属性的集合,类比项目中的一个独立模块)(感觉还是有些不恰当,见谅)
2). 基础服务为上游业务的功能和实现提供支撑,基础服务应用本身无状态,可随着系统的负荷灵活扩展来提供服务能力
盗用一下图:
- 服务子系统划分的注意事项
· 不要出现A服务中SQL需要连接查询到B服务的表的情况,这样A服务和B服务在进行垂直拆库时候会出错
· 服务子系统之间避免环状调用,依赖关系链不要过长
· 避免分布式事务 - 服务接口的设计原则:好的服务接口,并非只是纯粹的接口服务化
1) 接口的类型
· 简单的数据查询/写入接口
· 带有业务逻辑的数据查询/写入接口
· 同步接口
· 异步接口
2)接口的粒度
每个服务里面的方法应该代表一个功能
3) 接口应该定义版本号
4) 异常处理:应该有错误码和错误信息,信息多多益善
5) 必要的接口输入参数需要校验
6) 尽量在分布式服务的provider层面将consumer的属性也全部配齐(我们可以在开始时候就考虑provider的设计是否合理)
7) 服务接口设计与服务子系统划分过程要相互优化
写的感觉挺水的,见谅啊……