文章目录
- 走进微服务
- 传统开发的优势
- 耦合度过大
- 将功能拆分
- 各尽其责
- 部署微服务的问题
- 借助云计算
- 虚拟化技术
- 公有云和私有云
- IaaS、PaaS和SaaS
- 微服务的解决方案
- 谈谈未来
走进微服务
微服务是近年来非常火热的话题,随着互联网规模的日益扩张,越来越多的企业开始从传统服务架构向微服务架构过度,无论大型企业还是小型企业,几乎大部分面试官都会踢出有关微服务方面的问题,足以表明微服务对一个企业来说,是至关重要的。那么到底什么是微服务,为什么微服务能够成为一种趋势?
传统开发的优势
传统的SpringBoot应用开发简便,在开发一些小型单体应用方面就显得非常实用,比如一个成绩查询系统,即便是一人独立开发也能在很短的时间内完成,正如Spring官网的标语所说 “Spring makes Java simple.”。
耦合度过大
随着互联网的发展,越来越多的互联网应用兴起,传统的开发模式无法应对功能模块的灵活开发,版本的快速迭代。最普遍的情况就是,可能今天需要某一个功能,明天就需要另一个功能,后天就不要前两天的功能又需要开发新的功能了;可能今天这个功能很简单,但是到了明天可能就需要这个功能进一步升级。长期处在这种环境下,会使得传统的单体应用变得非常庞大,功能模块之间调用越来越密集,逐渐融合成一个很难拆分的 “整体”,到最后变得难以维护,而这对于开发人员来说,就是一场灾难。由于服务整合到一起,如果某个服务出现问题,可能会导致整个应用的崩溃,这显然是在生产环境中禁止出现的问题。更紧迫的问题是,用户对于公司业务的访问量越来越大,单服务器能够提供的硬件性能已经很难再做升级了。
将功能拆分
既然功能越来越多,合在一起难以维护,那为什么我们不将它们拆分呢?微服务的概念就应运而生。
微服务是一种软件开发技术- 面向服务的体系结构(SOA)架构样式的一种变体,将应用程序构造为一组松散耦合的服务。在微服务体系结构中,服务是细粒度的,协议是轻量级的。
微服务的思想是将每一个功能模块做成单独的服务,由不同的人员负责对应的模块,让专业的人做专业的事。SpringCloud就结合了SpringBoot的高效开发与微服务架构的设计思想,集合了一套专门用于搭建微服务架构模式的框架。
每一个服务单独部署,尽全力做好自己的事情,无需关心其他业务的情况。开发者无需再考虑应用整体的设计,能够更加专注的做对应模块的开发。同时得益于服务的拆分,现在即使使用不同的开发语言、运行环境,只要按照规则开发,依然能够组成一个整体应用。虽然好处非常多,但是肯定会带来一定的问题,相比单体应用,微服务架构在服务之间的调用就显得稍有逊色了,整个体系会产生更多的网络资源开销,来维持服务之间的通信,同时整个体系的运营成本是很高昂的。因此,并不是说微服务架构就能取代传统的单体应用,它只有适合与不适合之分。
各尽其责
以初代微服务架构为例(SpringCloud Netflix),一共包含五大核心组件:
- Netflix Eureka(服务注册与发现)
- Netflix Ribbon(负载均衡)
- Netflix Hystrix(服务熔断)
- Netflix Zuul(智能网关)
- SpringCloud Config(配置管理)
这些组件分别在各自的岗位工作,比如网关需要对收到的请求分发到微服务,负载均衡需要根据服务调用情况,智能分配请求给微服务处理。它们都部署在不同的主机上,因此,即使面对巨大的流量请求,只需进行横向扩展(增加更多相同的服务一起处理)就能轻松应对,而非传统的硬堆主机配置。
部署微服务的问题
既然微服务架构搭建理论已经有了,但在实际生产环境中,如果需要部署整套微服务体系,那么产生的硬件开销会比单体应用大得多,可能需要很多台物理服务器,才能够将所有的微服务全部部署。抛开硬件的成本,如果要连接很多台主机,那么就需要大量交换设备支持,同时,每一台机器都需要部署操作系统、搭建服务运行环境,如此巨大的工作量显然会让运维人员直接变秃,不仅是工作量,对运维人员的要求也会更高,要搭建这样的一整个体系,需要的知识面也会很广。现在看来,反而感觉微服务并不是想象中的那么强大了。
借助云计算
正如上文所说:
对于一家企业来说,一台计算机的运算能力是远远无法满足数据运算需求的,那么公司就要购置一台运算能力更强的计算机,也就是服务器。而对于规模比较大的企业来说,一台服务器的运算能力显然还是不够的,那就需要企业购置多台服务器,甚至演变成为一个具有多台服务器的数据中心,而且服务器的数量会直接影响这个数据中心的业务处理能力。除了高额的初期建设成本之外,计算机的运营支出中花费在电费上的金钱要比投资成本高得多,再加上计算机和网络的维护支出,这些总的费用是中小型企业难以承担的,于是云计算的概念便应运而生了。
那么为什么使用云计算就能很好地解决微服务部署的问题?云计算究竟是什么?
虚拟化技术
一台服务器在部署单个微服务应用的时候,利用率会很低,当然,一般人会想到能否在一台服务器上部署多个微服务应用,这样确实能提高利用率,但是这些微服务至始至终都是运行在同一个系统之上,他们之间并没有进行隔离,这样就会产生很多服务之间相互影响的问题,这并不是一个很好的解决方案。既然单个微服务应用利用率很低,那么我们能否将一台物理机划分为n个虚拟机,让这些虚拟机平均分配硬件资源或是按需分配呢?虚拟化技术就这样诞生了。如果你使用过VMWare Workstation的话,你就会知道,我们的操作系统之上其实还能继续运行其他的操作系统,但是它并没有在真正的硬件资源上运行,而是依托在我们的操作系统或是软件运行,这种技术就称为虚拟化技术。一台物理设备经过虚拟化之后,能够得到n台设备,他们之间相互隔离,能够单独运行一个操作系统。
公有云和私有云
云计算又分为公有云和私有云,公有云就是以阿里云、腾讯云为首的,将自己的云计算资源进行销售,用户可以根据自己的需要,合理的购买云计算资源,这样就避免了硬件过剩带来的开销浪费,也消除了维护服务器硬件设施的成本。同时,公有云不仅提供基本的云端硬件资源,还有成形的环境,比如云数据库,同时也提供云端应用,比如短信发送服务等。公有云的出现非常迎合现在的市场需求,因此相比私有云,公有云的用户会更多。私有云相对于公有云,最大的区别在于硬件设备由用户自己维护,同样也能将本地的硬件资源任意分割,按需分配。私有云相对于公有云会更加的安全,同时硬件的性能也是可控的。
IaaS、PaaS和SaaS
以公有云为例,云计算的纵向分为IaaS、PaaS和SaaS,IaaS只提供硬件资源比如阿里云的OSS对象存储,PaaS提供操作系统和运行环境,如腾讯云的轻量级应用服务器,SaaS提供一整套软件环境,用户只需关心数据信息即可。有关云计算的纵向分层这里只做简单介绍。
微服务的解决方案
了解了云计算之后,现在再来做微服务的部署,就显得很清晰了,我们可以对服务器进行虚拟化,自由分配硬件资源给对应的微服务,这样既减少了硬件资源的浪费,同时也使得微服务的运行更加稳定。我们可以将相同类型的核心业务部署在很多台虚拟服务器上,形成集群,即使其中一个出现问题,部署在其他虚拟服务器上的相同微服务也能接手,整个应用就不会崩溃,满足高可用的需求。同时,得益于服务降级机制,当云端的计算资源不足时,我们可以将边缘服务暂时关闭,转而运行我们的核心业务。显然,微服务的稳定、高可用、易于维护都离不开云计算。
谈谈未来
随着云计算资源的增多,对云计算节点的管理也显得越为重要,如同OpenStack这类的管理平台正在不断涌现,比如我国的ZStack Cloud云产品。如何合理的分配计算资源,如何实现更加高效简单的管理,是未来主要应对的问题。说回微服务,如今越来越多的微服务部署在云端,但微服务架构依然存在一些问题,我们不能止步不前,很多新兴的概念,如DevOps、Service Mesh等也开始慢慢升温,学习微服务架构并不仅仅是是为了解决眼下的问题,我们更应该体会那种思想,让自己在以后的学习中稳步前行。