微服务学习记录
前些天被老婆问起什么是“微服务”,居然一小子懵逼,好像不太好表述出来,于是到处找材料,包括:
定义介绍类文章是在InfoQ上的微服务学习资料汇总找到的。
总体来看AWS的说明比较浅显易懂(毕竟是商业机构),而网友“老刘”在知乎上“微服务架构是什么?”的回答还是蛮让人启发的,其中引用了Pattern: Service Mesh的内容,比较有趣,我截取其中4张图供参考:
以下内容来自AWS的服务介绍,总结得挺好的,服务提供也比较全面,抄下来自己看。
微服务是一种开发软件的架构和组织方法,其中软件由通过明确定义的API进行通信的小型独立服务组成。这些服务由各个小型独立团队负责。
微服务架构使应用程序更易于扩展和更快地开发,从而加速创新并缩短新功能的上线时间。
整体式架构与微服务架构
通过整体式架构,所有进程紧密耦合,并可作为单项服务运行。这意味着,如果应用程序的一个进程遇到需求峰值,则必须扩展整个架构。随着代码库的增长,添加或改进整体式应用程序的功能变得更加复杂。这种复杂性限制了试验的可行性,并使实施新概念变得困难。整体式架构增加了应用程序可用性的风险,因为许多依赖且紧密耦合的进程会扩大单个进程故障的影响。
使用微服务架构,将应用程序构建为独立的组件,并将每个应用程序进程作为一项服务运行。这些服务使用轻量级API通过明确定义的接口进行通信。这些服务是围绕业务功能构建的,每项服务执行一项功能。由于它们是独立运行的,因此可以针对各项服务进行更新、部署和扩展,以满足对应用程序特定功能的需求。
微服务的特性
- 自主性
可以对微服务架构中的每个组件服务进行开发、部署、运营和扩展,而不影响其他服务的功能。这些服务不需要与其他服务共享任何代码或实施。各个组件之间的任何通信都是通过明确定义的 API 进行的。
- 专用性
每项服务都是针对一组功能而设计的,并专注于解决特定的问题。如果开发人员逐渐将更多代码增加到一项服务中并且这项服务变得复杂,那么可以将其拆分成多项更小的服务。
微服务的优势
- 敏捷性
微服务促进若干小型独立团队形成一个组织,这些团队负责自己的服务。各团队在小型且易于理解的环境中行事,并且可以更独立、更快速地工作。这缩短了开发周期时间。您可以从组织的总吞吐量中显著获益。
- 灵活扩展
通过微服务,您可以独立扩展各项服务以满足其支持的应用程序功能的需求。这使团队能够适当调整基础设施需求,准确衡量功能成本,并在服务需求激增时保持可用性。
- 轻松部署
微服务支持持续集成和持续交付,可以轻松尝试新想法,并可以在无法正常运行时回滚。由于故障成本较低,因此可以大胆试验,更轻松地更新代码,并缩短新功能的上市时间。
- 技术自由
微服务架构不遵循“一刀切”的方法。团队可以自由选择最佳工具来解决他们的具体问题。因此,构建微服务的团队可以为每项作业选择最佳工具。
- 可重复使用的代码
将软件划分为小型且明确定义的模块,让团队可以将功能用于多种目的。专为某项功能编写的服务可以用作另一项功能的构建块。这样应用程序就可以自行引导,因为开发人员可以创建新功能,而无需从头开始编写代码。
- 弹性
服务独立性增加了应用程序应对故障的弹性。在整体式架构中,如果一个组件出现故障,可能导致整个应用程序无法运行。通过微服务,应用程序可以通过降低功能而不导致整个应用程序崩溃来处理总体服务故障。
AWS微服务平台
计算:微服务的处理能力。
- 容器:Amazon Elastic Container Service;一种可高度扩展的高性能容器管理服务,支持 Docker 容器,可让您轻松地在 Amazon EC2 实例的托管集群上运行应用程序。
- 无服务器:AWS Lambda;通过 AWS Lambda,无需预置或管理服务器即可运行代码。只需上传您的代码,Lambda 会管理运行和扩展高可用性代码所需的一切工作。
存储与数据库:可扩展、持久且安全的数据存储。
- 缓存:Amazon ElastiCache;Amazon ElastiCache 允许您从快速的托管内存缓存中检索信息,而无需完全依赖于速度较慢的基于磁盘的数据库,从而提高了服务性能。
- 对象存储:Amazon S3;Amazon S3 为开发人员和 IT 团队提供适用于所有数据(无论大小)的高度可靠、安全且可扩展的对象存储。
- 关系数据库
- Amazon RDS:在云中轻松设置、操作和扩展关系数据库。有六种常见的数据库引擎可供选择,其中包括 Oracle、Microsoft SQL Server、PostgreSQL、MySQL 和 MariaDB。
- Amazon Aurora:一种关系数据库引擎,既具有高端商用数据库的速度和可靠性,又具有开源数据库的简单性和成本效益。提供的吞吐量最高可为同一硬件上运行的标准 MySQL 的 5 倍。
联网:具有高吞吐量和亚毫秒级延迟的联网服务。
- 服务发现:AWS Cloud Map;AWS Cloud Map 是一种针对所有云资源的服务发现功能。借助 Cloud Map,您可以为应用程序资源定义自定义名称,并维护这些动态变化资源的更新位置。
- 服务网格:AWS App Mesh;AWS App Mesh 使您可以轻松监控和控制运行于 AWS 上的微服务。App Mesh 标准化了微服务的通信方式,为您提供端到端的可见性,并有助于确保应用程序的高可用性。
- Elastic Load Balancing
- Application Load Balancer:Application Load Balancer 对应用程序层(第 7 级)的 HTTP 和 HTTPS 流量进行负载均衡,面向交付包括微服务和容器在内的现代应用程序架构,提供高级请求路由功能。
- 网络负载均衡器:网络负载均衡器提供高性能负载均衡,在网络连接层(第 4 级)运行,并且允许您根据 IP 协议数据路由到微服务的连接。网络负载均衡器每秒可以处理数百万个请求,同时保持超低延迟。
- API 代理:Amazon API Gateway;Amazon API Gateway 为 API 管理提供了一个综合平台。借助 Amazon API Gateway,您可以处理成千上万个并发 API 调用和流量管理、授权、访问控制、监控以及 API 版本管理。
- DNS:Amazon Route 53;Amazon Route 53 是一种具备高可用性和可扩展性的云域名系统 (DNS) Web 服务,可将请求有效连接到在 AWS 中运行的基础设施。它可用于微服务的 IP 运行状况检查和服务发现。
消息收发:发布和协调进程间通信。
- 消息发布和订阅:Amazon Simple Notification Service (Amazon SNS);Amazon SNS 是一种完全托管的发布/订阅消息收发服务,可轻松分离和扩展微服务、分布式系统和无服务器应用程序。
- 消息队列:Amazon Simple Queue Service (Amazon SQS);Amazon SQS 是一种完全托管的消息队列服务,可让您轻松分离和扩展微服务、分布式系统和无服务器应用程序。
日志记录和监控:监控服务性能和资源利用率。跟踪复杂的架构,以进行问题排查和优化。
- API 监控:AWS CloudTrail;借助 CloudTrail,您可以记录日志、持续监控并保留与整个基础设施中的操作相关的账户活动。CloudTrail 事件历史记录可以简化安全性分析、资源更改跟踪和问题排查工作。
- 应用程序和资源监控:Amazon CloudWatch;使用 Amazon CloudWatch 来收集和跟踪各项指标、收集和监控日志文件、设置警报,以及自动应对正在运行的服务和 AWS 资源中的更改。
- 分布式跟踪:AWS X-Ray;可在请求通过应用程序时提供请求的端到端视图,并展示应用程序底层组件的映射。由于一组微服务协同工作才能处理请求,因此 AWS X-Ray 可以帮助您集中浏览日志,从而监控复杂的交互并对其进行故障排除。
开发运营:管理从提交到运行的代码生命周期。
- 容器映像存储库:Amazon Elastic Container Registry (Amazon ECR);一种完全托管的 Docker 容器注册表,可用于存储、管理和部署 Docker 容器映像。Amazon ECR 与 Amazon Elastic Container Service (Amazon ECS) 集成,从而简化容器生产工作流程的开发。
- 持续交付:AWS 开发人员工具;AWS 开发人员工具是一组服务,利用这些服务,模拟开发运营的开发人员和 IT 运维专业人员可以快速安全地交付软件。这些服务结合起来,可以帮助您安全地存储应用程序的源代码并对其进行版本控制,同时还可自动构建、测试应用程序并将其部署到 AWS 或您的本地环境中。