微服务架构对测试也带来了很大的挑战 。传统的单体WEB应用只需测试单一的REST API即可,而对微服务进行测试,需要启动它依赖的所有其他服务 。这种复杂性不可低估 。
微服务的另一大挑战是跨多个服务的更改 。比如在传统单体应用中,若有A、B、C三个服务需要更改,A依赖B,B依赖C 。我们只需更改相应的模块,然后一次性部署即可 。但是在微服务架构中,我们需要仔细规划和协调每个服务的变更部署 。我们需要先更新C,然后更新B,最后更新A 。
部署基于微服务的应用也要复杂得多 。单体应用可以简单的部署在一组相同的服务器上,然后前端使用负载均衡即可 。每个应用都有相同的基础服务地址,例如数据库和消息队列 。而微服务由不同的大量服务构成 。每种服务可能拥有自己的配置、应用实例数量以及基础服务地址 。这里就需要不同的配置、部署、扩展和监控组件 。此外,我们还需要服务发现机制,以便服务可以发现与其通信的其他服务的地址 。因此,成功部署微服务应用需要开发人员有更好地部署策略和高度自动化的水平 。
以上问题和挑战可大体概括为:
- API Gateway
- 服务间调用
- 服务发现
- 服务容错
- 服务部署
- 数据调用

文章插图
幸运的是,出现了很多微服务框架,可以解决以上问题 。
第一代微服务框架
Spring Cloud
Spring Cloud为开发者提供了快速构建分布式系统的通用模型的工具(包括配置管理、服务发现、熔断器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等) 。主要项目包括:
- Spring Cloud Config:由Git存储库支持的集中式外部配置管理 。配置资源直接映射到Spring Environment,但是如果需要可以被非Spring应用程序使用 。
- Spring Cloud Netflix:与各种Netflix OSS组件(Eureka,Hystrix,Zuul,Archaius等)集成 。
- Spring Cloud Bus:用于将服务和服务实例与分布式消息传递联系起来的事件总线 。用于在集群中传播状态更改(例如配置更改事件) 。
- Spring Cloud for Cloudfoundry:将您的应用程序与Pivotal Cloudfoundry集成 。提供服务发现实现,还可以轻松实现通过SSO和OAuth 2保护资源,还可以创建Cloudfoundry服务代理 。
- Spring Cloud - Cloud Foundry Service Broker:提供构建管理一个Cloud Foundry中服务的服务代理的起点 。
- Spring Cloud Cluster:领导选举和通用状态模型(基于ZooKeeper,redis,Hazelcast,Consul的抽象和实现) 。
- Spring Cloud Consul:结合Hashicorp Consul的服务发现和配置管理
- Spring Cloud Security:在Zuul代理中为负载平衡的OAuth 2休眠客户端和认证头中继提供支持 。
- Spring Cloud Sleuth:适用于Spring Cloud应用程序的分布式跟踪,与Zipkin,HTrace和基于日志(例如ELK)跟踪兼容 。
- Spring Cloud Data Flow:针对现代运行时的可组合微服务应用程序的云本地编排服务 。易于使用的DSL,拖放式GUI和REST-API一起简化了基于微服务的数据管道的整体编排 。
- Spring Cloud Stream:轻量级事件驱动的微服务框架,可快速构建可连接到外部系统的应用程序 。使用Apache Kafka或RabbitMQ在Spring Boot应用程序之间发送和接收消息的简单声明式模型 。
- Spring Cloud Stream Application Starters:Spring Cloud任务应用程序启动器是Spring Boot应用程序,可能是任何进程,包括不会永远运行的Spring Batch作业,并且它们在有限时间的数据处理之后结束/停止 。
- Spring Cloud ZooKeeper:ZooKeeper的服务发现和配置管理 。
- Spring Cloud for Amazon Web Services:轻松集成托管的Amazon的Web Services服务 。它通过使用Spring的idioms和APIs便捷集成AWS服务,例如缓存或消息API 。开发人员可以围绕托管服务,不必关心基础架构来构建应用 。
- Spring Cloud Connectors:使PaaS应用程序在各种平台上轻松连接到后端服务,如数据库和消息代理(以前称为“Spring Cloud”的项目) 。
- Spring Cloud Starters:作为基于Spring Boot的启动项目,降低依赖管理(在Angel.SR2后,不在作为独立项目) 。
- Spring Cloud CLI:插件支持基于Groovy预言快速创建Spring Cloud的组件应用 。
Dubbo是一个阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案 。其核心部分包含:
- 远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式 。
推荐阅读
- 历史上真实的胤祥 十三阿哥胤祥
- 史上最幸运的人 世界上谁最幸运
- 史上最大的鸟类 世界上最大的鸟是什么鸟?体重多少?
- 世界瘟疫史 人类历史上的瘟疫事件
- 帕萨特|帕萨特终生对手蒙迪欧停产 曾是史上研发最贵车型!仅剩中国特供
- 世界上最大的蚊子是什么蚊子 史上最大的蚊子
- 红酒茅台普洱茶 另类理财逼上梁山
- 史上最详细的mac系统快捷键介绍
- 湖北宰相有多少个 古代湖北历史名人
- 史上水下憋气的世界记录是多少 人类水下憋气时间最长记录
