架构师训练营第 1 期第 10 周学习总结

用户头像
好吃不贵
关注
发布于: 2020 年 11 月 28 日
架构师训练营第 1 期第 10 周学习总结

本周主要学习了模块的分解。主要有组件的设计原则,微服务的分隔,微服务的网关技术,以及微服务落地实践的策略与思路。

模块分解才是微服务最核心的地方,微服务的框架Dubbo等,掌握起来还是很容易的,花几天时间,就可以了。模块分解的高内聚,低耦合是设计中的关键。其中高内聚有几个原则可以参考,比如复用发布等同原则,表示复用的粒度就是发布的最小粒度,不同模块间,当接口改变时,可以采用不同版本的接口。比如版本号分为主,次,修订版。其中主版本号表示不向前兼容,次版本号向前兼容,但是重要的功能修订或bug修复,修订版表示不重要的功能修订。共同封闭原则表示会同时修改的,放到一个组件中。共同复用原则不强迫一个组件的用户依赖他们不需要的东西。其中低耦合也有几个原则,分别是无循环依赖原则,不能A以依赖B, B依赖C,C又依赖A,这样改起来非常痛苦。通过简单的软件设计,就可以发现依赖问题。稳定依赖原则表示不稳定的组建依赖稳定的组件,这样改动最小。稳定抽象原则表示抽象程度和稳定程度成正比,越稳定的,越要抽象。

然后介绍了微服务的思想。最重要的是需求,其次是价值,然后是原则,再是实践和工具。架构落地时,要业务先行,技术只是手段,而不是目的。先有独立的模块,再有分布式的服务,再有微服务。微服务也是为了架构清晰,边界清晰,从而提高分布式集群性能。

后面介绍了微服务的具体实现。主要分为三部分,服务消费者,通常是网关接入的,服务提供者,服务注册中心。服务提供者会把自己注册到服务注册中心,服务消费者会订阅相应的服务。网关可以实现统一接入,满足高性能、高并发、高可靠、负载均衡。也实现了安全防护,可以防刷,设置黑白名单,还可以对协议进行适配,http,dubbo,jsf等,还可以流量管控与容错,对流量进行限流、降级、熔断等。阿里的李智慧老师及其团队开发了异步网关Flower。网关的鉴权实现用了OAuth2.0协议,通常使用授权码方式,比如用微信登录某服务端,先发到微信的agent,会到微信的鉴权服务器拿到授权码,再通过微信的agent发到客户端,客户端拿授权码去微信的鉴权服务器实现认证。

之后介绍了DDD领域驱动设计,分为高低两层,分别是战略设计和战术设计。战略设计包括架构设计,主要是从领域出发,根据业务分析领域模型,而不是根据界面来设计。以及分子领域,把用户,商品等对象分开。再确定限界上下文,是物理上的,对应微服务,一个组件或一个模块。最后确定上下文映射图,表示各领域的依赖关系和交互关系。战术设计包括实体,订单对象,产品对象等,是领域的具体实体。也包括值对象,对象尽可能设计为值对象。聚合关系吧对象关联到一起,作为一个单元来处理数据更改,聚合根等于多个实体加上值对象。DDD的分层架构主要是用户接口层,应用层及领域层,其中领域层通过聚合根提供。后面还讲了根据领域驱动设计来重构系统的例子。开始的时候,可以用CRUD,速度快,当软件规模大了以后,要进行重构,拆分模块,复用代码,其实就是构建领域驱动的系统 。具体步骤是,定义每个实体真正的意思是什么样的,然后对核心业务流程进行分析,画出泳道图、状态图,一个泳道的,就是一个领域,可以作为一个微服务实现。可以通过值对象的方式重构成员变量,把变量加上具体的验证方法,这样就可以更好地实现面向对象,复用代码,比如phone电话号码,在多个类使用,都需要判断号码是否合法。这样,就可以把判断号码是否合法的代码封装到类里,直接判断。

总之,模块的分解要遵守高内聚,低耦合的原则,微服务和领域驱动设计就是实现这个目的的手段。

用户头像

好吃不贵

关注

还未添加个人签名 2018.11.20 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期第 10 周学习总结