微服务基础
1、 微服务带来的挑战
- 运维的新挑战
微服务会导致部署的程序增多,合理的编排很重要 - 接口的一致性
微服务虽然拆分了,但还是需要通过接口进行业务上的依赖,若接口改变了,需要提供方和调用方协调改动,不然会出现接口不一致问题。 - 分布式的复杂性
由于拆分各个微服务都是独立运行各自的进程中,可能分布在不同的服务器、不同的地域,它们只能通过网络通信来进行合作,所以要考虑很多因素,如:网络延迟、分布式事务、异步消息、session同步等问题。
2、智能端口与哑管道
在单体应用中通过函数调用,在微服务中由于不在同一进程所以要通过网络调用,如果仅仅是改用RPC调用,会导致微服务之间产生繁琐的通信,使系统表现更为糟糕,所以需要更粗粒的的通信协议。
在微服务中通常采用以下两种调用方式:
3、去中心化
采用微服务后,各个组件通过RESTful 接口进行调用依赖,各个应用组件可以使用自己的数据库,可以使用不同的数据库(如MongoDB),而且不用局限于某一种技术,各个组件都可以选择合适的技术栈,避免出现“杀鸡用牛刀”的局面。
4、容错设计
传统单体应用中,如果需要修改或增加一个功能则要将整个应用重新部署,如果某一组件出现问题就会出现一挂全挂的局面,而微服务架构中某一组件出现问题可以单独下线不影响其他功能使用。
5、为什么选用SpringCloud
一句话:SpringCloud包含微服务的方方面面,大而全、成熟、省心、社区活跃、Spring和Netflix背书。
6、SpringCloud简介
SpringCloud包含多个子项目,还会不断增加:
- SpringCloud Config :配置中心,支持使用git存储配置文件,提高项目配置灵活性
SpringCloud Netflix: 核心组件,对Netflix OSS开源套件进行组合,包含:
- Eureka:注册中心,服务的发现与注册
- Hystrix: 容错管理组件,提供降级熔断等保护机制
- Ribbon: REST客户端调用组件,提供负载等功能
- Feign: 基于 Ribbon: 和 Hystrix的声明式组件调用组件
- Zuul: 网管组件,提供智能路由、访问过滤等功能
- Archaius: 外部化配置组件
SpringCloud Bus : 事件、消息总线
- SpringCloud Cluster: 针对ZooKeeper、Redis、Consul的选举算法和通用状态模式的实现
….