微服务
将功能分解到各个离散的服务中,以实现对解决方案的解耦,并提供更加灵活地额服务支持。
系统中的微服务可被独立部署,各个微服务之间是松耦合的。每个服务仅仅关注完成一件任务并很好的完成该任务。
微服务是一种架构风格,把一个大型复杂软件应用拆分成一个或者数十个个微服务,它可以扩展单个组件,
而不是而不是应用程序堆栈,从而满足服务等级协议。
微服务是根据业务组件领域来创建应用,这些组件可以独立的完成开发、管理和迭代。
特点
1、分布式管理,强调隔离性。
2、按照业务来划分组织
3、有生命的产品,而不是项目
4、强服务个体弱通信
5、自动化运维Devps
6、具有高度的容错性
7、可以快速演化和迭代
image.png
image.png
微服务具体实践要解决的问题?
1、客户端如何访问这些服务?
Api Gateway进行处理 : 提供统一的服务入口,微服务对前台透明;聚合后台服务,集成流量,提升性能;提供安全、过滤、流控等API的管理功能。
2、每个服务之间是如何通信的?
异步:消息队列 (Kafka)
同步:Rest(Spring boot 、JAX-RS ) 或 RPC(dubbo)
同步和异步的区别?
1)同步调用比较简单、一致性强,但是容易出现调用问题,尤其是在调用层次比较多的时候;可以跨客户端;支持各种语言更加灵活;封装了httpSDK就可以使用广泛;
RPC传输协议协议更加高效,安全更加可靠,特别是在一个公司内部,有统一规范。
2)异步应用广泛,既能减少调用服务之间的耦合又能调用之间的缓冲,确保消息不会冲垮被调用方,同事能保证调用的服务体验。
但是会使一致性减弱,需要介绍数据的最终的一致性,后台服务要实现幂等性;有时会有重复;同时要引入Broker(代理)。
3、如此多的服务如何实现?
采用类似zookeeper实现:服务注册等信息的分布式管理。
当服务上线时,服务提供者将自己的服务信息提供到ZK,并通过心跳维持长链接,实时更新链接信息。服务调用者根据ZK去寻找地址,通过
可定制的算法,找到一个服务,还可以服务的信息缓存到本地来提高性能,当服务上线时,ZK会把信息通知给服务的客户端。和doubbo很像。
4、服务挂了,该如何解决?有什么备份方案和应急处理机制?
重试机制、应用限流、熔断机制、负载均衡、系统降级。
网友评论