[go微服务-3]微服务架构演变历程
服务端架构的演变
一般来说,早期的软件大多数是
单体架构
接着使用分层技术演化为垂直架构
然后SOA面向服务架构
和微服务架构
相继登场
最终随着云技术的应用和推广而孕育出云原生架构
的思想
单体架构
缺点:
进行局部改动就需要重新部署,而且编译时间过长除此之外单体架构的技术栈也不易扩展
只能不断地在原有基础上进行局部优化
垂直分层架构
单体架构在系统用户访问量逐渐增大的情况下若仅仅依靠
扩展物理机配置
或者增加机器
来优化系统的性能往往收效甚微
单体架构中不同业务模块的差异
就会显现这些模块所需要的机器数量和性能各有差异
这时为了提升机器利用率和性能,垂直分层架构
就诞生了
缺点:
● 垂直分层架构的系统拆分使得集群搭建变得复杂
● 涉及到的服务间调用服务之间耦合度变高调用关系错综复杂,难以维护调用关系
SOA面向服务架构
当垂直架构拆分的应用越来越多时,就会出现多个应用都依赖的业务逻辑组件并且各个应用进行
交互
的需要也越来越频繁此时就需要将部分通用的业务组件独立出来并定义好服务间交互的接口向外提供服务,让其他服务调用
SOA面向服务架构这就“应运而生”了
微服务架构
越来越多的中小微企业推出面向普通大众的网站或者应用这些企业不同于大型软件服务企业没有能力也无需构建SOA所依赖的ESB企业服务总线微服务架构于2014年由Matrin Fowler提出其理念是
将业务系统彻底地组件化和服务化
形成多个可以独立开发、部署和维护的服务或者应用的集合以应对更快的需求变更和更短的开发迭代周期
缺点:
● 微服务架构拆分的服务实例过多的话
服务治理成本将会极大升高,不利于系统维护
● 服务之间相互依赖,有可能形成复杂的依赖链条
● 服务实例之间交互需要处理分布式事务、调用幂等性和重试等问题开发成本高,对团队挑战大
微服务架构的选型
随着微服务架构的火热,也诞生了很多微服务框架
如Java
语言的Spring Cloud
、Go
语言的Go Kit
和Go Micro
以及Node.js
的Seneca
虽然微服务架构的实践落地独立于编程语言
但是Go
语言在微服务架构的落地中仍有其独特的优势因此Go
语言的微服务框架也相继涌现
各方面都较为优秀的有Go Kit
和Go Micro
等
Go语言的独特优势
● 语法简单,上手快
Go提供的语法十分简洁,关键字只有25个几乎支持大多数现代编程语言常见的特性● 原生支持并发
协程模型是非常优秀的服务端模型,可以充分利用多核● 丰富的标准库
Go目前内置了大量的库,开箱即用,非常方便● 部署方便
编译包小,可直接编译成机器码,不依赖其他库
Go Kit框架
Go Kit
是Go语言工具包的集合
可帮助工程师构建强大、可靠和可维护的微服务
它提供了用于实现系统监控和弹性模式组件的库
这些库可以协助工程师提高微服务架构的性能和稳定性
Go Micro框架
Go Micro
是基于Go语言实现的插件化RPC
微服务框架它提供了服务发现、负载均衡、同步传输、异步通信以及事件驱动等机制并尝试去简化分布式系统间的通信让开发者可以专注于自身业务逻辑的开发
Go Kit 与Go Micro的对比
Go Kit是一个
微服务的标准库
它可以提供独立的包通过这些包,开发者可以用来组建自己的应用程序微服务架构意味着构建分布式系统,这带来了许多挑战Go Kit可以为多数业务场景下实施微服务软件架构提供指导和解决方案Go Micro是一个面向微服务的
可插拔RPC框架
可以快速启动微服务的开发Go Micro框架提供了许多功能,无需重新“造轮子”所以开发者可以花更多的时间在需要关注的业务逻辑上但是Go Micro在快速启动微服务开发的同时也牺牲了灵活性
,并且将gRPC强制为默认通信类型更换组件不如Go Kit简便
云原生与微服务架构是什么关系
从云原生的定义就可以知道,微服务架构是云原生的关键技术之一而从本质上来说,云原生和微服务是两种不同维度的技术● 云原生
更侧重应用程序的运行环境,它是以k8s和容器为基础的云环境● 微服务架构
则对应于应用程序的软件架构
云原生不完全依赖微服务架构
你可以将单体应用程序打包到容器中,而不需要创建微服务这种情况下,云原生架构对于单体式应用来说重要性可能会降低很多所以很多云原生的工具都是针对微服务架构设计的
云原生时代的微服务架构
能够发挥微服务在敏捷开发、小团队自治等方面的优势,同时云原生提供的强大基础设施支撑,使得软件产品能够快速迭代、快速恢复回滚和服务实例横向扩展云原生与微服务架构搭配能够发挥二者最大的优势
小结
微服务架构
是云原生的关键技术之一在开发管理复杂软件系统时,能够体现其优势本课时我们主要介绍了服务端架构的演进,以及常见的微服务框架选型,最后我们还探讨了云原生与微服务架构的关系