这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战。
微服务架构的优势
1、对于每个单一的微服务,都可以选择自己擅长的语言去开发,扩展性强
即使微服务的架构是java的,仍然可以使用python、go等语言去实现单个微服务。因为服务与服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的Restful API)。
2、对于整个应用而言,代码不再耦合,不会出现大量的冲突
3、微服务可以重用,应用发布时间可控性更强
4、通过故障隔离,让错误中微服务中降级,不会影响到整个应用或其他服务。
采用熔断降级的形式,将错误和流量限制在单个微服务的内部,不向下继续传播。
微服务架构需要遵循的原则
1、职责独立
每个微服务只做自己功能范围内的事,不同的微服务中业务功能上不应该存在交叉,否则需要修改微服务的功能实现划分。
即使每个微服务的功能是独立的,但是对于客户端的请求仍然可能需要多个微服务之间共同启动响应,这就是微服务之间的依赖链,微服务之间的依赖链不要“过长”,单个微服务的依赖链路最好不要超过3。
2、使用熔断器实现快速的故障容错和线程隔离
例如Hystrix、Sentinel。
3、通过网关代理微服务请求
可以用Gateway、Zuul这样的组件来实现网关。
网关是微服务架构对外暴露的唯一入口,这样整个系统的入口只有一个,方便客户端的同时也方便我们去统一处理流量控制、请求过滤等。
本电商项目是用Gateway来实现服务网关,拥有高性能的同时还能实现网关层面的流量并发控制。
4、确保微服务API变更后能够向后兼容
每个API接口的修改都要慎重,做好兼容,提供默认参数等等。
电商项目微服务模块拆分
网关鉴权: 用户访问 --〉E-commerce-gateway(路由配置、限流配置、过滤器 ) --〉E-commerce-authority(基于JWT实现,登录、注册)
四大功能微服务模块(E-commerce-service): 账户 (E-commerce-account)、商品 (E-commerce-goods)、订单 (E-commerce-order)、物流 (E-commerce-logistics)
大致功能
用户:
- 注册/登录电商App
电商App:
- 用户账户服务 --〉地址信息+余额信息
- 商品服务 --〉商品信息+创建商品
- 订单服务 --〉订单信息+创建订单
- 物流服务 --〉物流单