聊一聊微服务
引
言
在这篇文章中,我们将介绍微服务,那就需要回答一个司空见惯的问题“什么是微服务?”
1
什么是微服务?
微服务是一种软件开发技术,它将应用程序构建为松散耦合服务的集合。 在微服务架构中,服务是细粒度的,协议是轻量级的。 微服务是一种架构风格,是将一个复杂的系统分解成多个更小粒度的服务单元。
“微服务 - 也称为微服务架构 - 是一种架构风格,它将应用程序构建为一组松散耦合的服务,实现业务功能。 微服务架构支持大型复杂应用程序的持续交付/部署。它还使组织能够发展其技术堆栈。“
-- Chris Richardson, Microservices.io
这是比较权威的微服务解释与定义。换句话说,微服务架构由小型和自治服务组成。 每个服务都是独立且可独立部署的,这意味着将大型应用程序分解为松散耦合的模块。
2
为何选择微服务?
以下是基于微服务架构设计应用程序的一些优点:
技术异构性 - 不同的服务可以用几种技术(即Java,Node.js,Ruby,.Net等)实现,并与每种技术进行通信。
故障隔离 - 与单体架构式应用相比,微服务中更容易隔离故障。 例如内存泄漏,数据库复制的问题等。
扩展 - 应用程序的利用率每天都在迅速增加,同时导致性能下降并导致应用程序扩展。 它可以是水平扩展或垂直扩展。
易于部署 - 如果负载很高,部署单片应用程序需要花费更多时间,有时需要花费数小时才能部署并随时可用,但微服务是由小型,高度分离的服务组成,专注于执行小任务,为促进模块化系统建设提供了方法。
优化可替换性 - 服务可以使用自己的架构或技术运行,与单个业务功能保持一致,因此它们只执行一项功能。为了更改或替换或弃用服务,可以优化并且不会花费太多时间来开发内部或各种技术的服务,并且不会影响其他服务。
云支持 - 云改变了IT支持业务的方式。 一个结构良好的云平台可以从混合的私有/公共云生态系统中获取服务。 通过基于微服务的方法来促进组织的流程需求,尝试解决问题变得更加容易。
3
微服务面临的挑战
微服务比传统系统更复杂。 反过来,环境变得更加复杂,因为服务必须管理,保护,监控和支持。
流程改进 - 为了利用微服务的交付速度,组织应采用敏捷开发流程,持续集成,自动化QA检查,自动化交付渠道。
增加了微服务需要多次部署以及更多失败场景的概率。
多点部署意味着需要资源,硬件和工程资源稀缺且昂贵。 当有数百或数千个微服务时,团队如何确定优先级?
迁移 - 将单体应用迁移到微服务体系结构需要确定微服务的正确边界,并且此过程很复杂。
使用微服务架构方式,需要提出了几个问题:
如何评估是否应该允许将代码拆分迁移到不同的服务?
如何监控整体系统健康状况并尽早发现潜在的问题?
版本如何控制?
如何分析分布式应用程序中的大量日志数据?
如何监控微服务的性能?
4
微服务架构
以下是微服务的相对高层次的抽象概述:
5
微服务通信
微服务之间的通信可以设置为同步或异步方式。 通常,微服务使用广泛采用的轻量级协议(如HTTP和REST)或消息传递协议(如JMS或AMQP)相互通信。 在特定情况下,可以选择更优化的通信协议,例如Thrift,gRpc或Dubbo等。
仅用一种方法开发系统是不合理的。根据具体场景需求需要两种方式组合使用。原则上,异步方法非常适合微服务,但是,尝试将所有内容建模为异步会导致复杂的系统设计。
6
微服务基础设施
为了实现微服务可伸缩性和可用性,可以将一个微服务部署在一个或多个虚拟机(VM)或物理机中。 如果服务简单且流量较小,则可以在一个VM上部署多个微服务。
对于云服务架构,开发人员无需担心服务的运行位置。服务将部署在云服务器中,基础架构可自行管理部署。如果发起包含数百个微服务,云服务架构是最佳选择。
总结
在这篇文章中,我们对微服务有了基本的了解。 我们了解构建微服务的微服务和核心原则是什么。 我们在使用这些服务时涵盖了架构以及面临的挑战。
领取专属 10元无门槛券
私享最新 技术干货