这两天对互联网的架构演变进行了简单了解,并对微服务的出现很感兴趣,因此对相关知识进行了简单的整理与总结。php
本篇文章先简单介绍了互联网架构的演变,进而介绍了服务化,最后介绍了微服务及最新的服务网格(Service Mesh)。
--------------------- css
在计算机软件发展早期,通常桌面软件都是采用这种架构,无论是界面仍是业务处理仍是数据处理都放到一个包中。这种其实谈不上架构,但也能够说是很好的架构,由于它足够简单。html
但随着浏览器的出现便产生了web应用,web应用的特色是界面部分是显示在浏览器中,服务处理是在服务容器中的,页面显示通常用css+js+html技术来处理,然后端能够用java、php等语言,这就产生了先后端分离。对于web系统,一体架构难以知足先后端分离的开发需求,于是便产生了MVC架构。java
MVC才算的上真正意义上的架构,由于它除了解决了先后端分离问题,还引入了一种全新的开发模式,用一种业务逻辑、数据、界面显示分离的方法组织代码,使得整个应用层次更加分明,并且各个层次之间不但减低了耦合性,还提升了各个层次的可重用性。nginx
但随着应用规模的不断扩大,应用模块不断增长,整个应用也显得愈来愈臃肿,维护起来也更加困难,所以便又产生了多应用架构。web
多应用架构很简单,就是把原来的应用按照业务特色拆分红多个应用。好比一个大型电商系统可能包含用户系统、商品系统、订单系统、评价系统等等,咱们能够把他们独立出来造成一个个单独的应用。多应用架构的特色是应用之间各自独立 ,不相互调用。算法
多应用虽然解决了应用臃肿问题,但应用之间相互独立,有些共同的业务或代码没法复用。docker
对于一个大型的互联网系统,通常会包含多个应用,并且应用之间每每还存在共同的业务,而且应用之间还存在调用关系。除此以外 ,对于大型的互联网系统还有一些其它的挑战,好比如何应对急剧增加的用户,如何管理好研发团队快速迭代产品研发,如何保持产品升级更加稳定等等 。数据库
所以,为了使业务获得很好的复用,模块更加容易拓展和维护,咱们但愿业务与应用分离,某个业务再也不属于一个应用,而是做为一个独立的服务单独进行维护。应用自己再也不是一个臃肿的模块堆积,而是由一个个模块化的服务组件组合而成。后端
上面介绍的分布式架构即服务化。咱们再总结一下,服务化主要有以下特色:
那么企业采用服务化有哪些好处呢?
若是要实现服务化的话,最经常使用的方式就是利用RPC框架。由于服务组件通常分布在不一样的服务器上,因此要实现服务化须要解决的第一个问题就是RPC**远程服务调用**。相似于RPC方案有不少,好比:
上面提到要实现服务化首先须要解决远程服务调用问题,除此以外,还有不少其余问题须要解决。
上面提到了服务化,其实要想服务化,服务治理是关键。那么有没有好的服务治理方案呢?答案是有的,并且不少人都在用这个框架,他就是-dubbo。dubbo就是一个带有服务治理功能的RPC框架。
dubbo提供了一套较为完整的服务治理方案,因此企业若是要实现服务化的话,dubbo 是很好的一个选择。这里简单介绍一下dubbo服务治理相关方案。
服务治理领域最重要的问题就是服务发现与注册。dubbo中引入了一个注册中心的概念,服务的注册与发现主要就依赖这个服务中心。
dubbo注册中心服务注册发现的具体过程:
服务提供者启动,向注册中心注册本身提供的服务
消费者启动,向注册中心订阅本身须要的服务
注册中心返回服务提供者的列表给消费者
消费者从服务提供者列表中,按照软负载均衡算法,选择一台发起请求
如今不少人都在谈微服务,那么到底什么是微服务呢?这里谈谈我对微服务的理解。
微服务有两个核心:
微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每一个微服务仅关注于完成一件任务并很好地完成该任务。在全部状况下,每一个任务表明着一个小的业务能力。
微服务架构 ≈ 模块化开发 + 分布式计算
从上面这幅图看出,微服务特别简单(好的架构就应该简单),咱们把服务再拆分红一个个API,API是一个完整的功能。而后咱们把API扔到一个“云上”,而后用户就能够到“云上”获取全部API的服务,这个“云”保证能提供好的服务。
咱们能够看到,有了微服务以后,服务对用户来讲变得特别简单,并且上面dubbo的不足之处在微服务这里都解决了。使用者再也不须要依赖任何jar包,再也不须要去注册中心查找服务,再也不去作鉴权处理,不用担忧服务挂掉,不用担忧不会使用服务,全部的问题这个“云”都解决了。这也是微服务的核心之一,提供好服务。
说到这里,你们就应该大致知道该怎么作微服务了,图中的“云”是关键。下面咱们就慢慢拨开这朵云。
微服务的关键是服务网关,因此,上面提到的“云”就是服务网关。要作微服务,咱们先定义一下微服务须要具有的特色。
上面提到了,dubbo还存在一些问题 ,其实dubbo存在的问题 就是 微服务要解决的问题,这里 再总结一下。固然,dubbo和微服务的侧重点不同,dubbo侧重于内部接口之间的RPC,而微服务则侧重于对外提供服务。
高性能服务网关;
统一入口、API配置管理、分流鉴权、服务监控、协议转换;
API映射、OAuth2.0、API文档管理;
分布式、可拓展;
成熟的服务治理框架dubbo;
MQ服务之间解耦;
服务docker化;
基于访问压力的实时集群调度与管理;
这里简单介绍一下弹性云的概念,微服务要想提供好服务,保证API不能挂掉而且有好的性能,须要很高的运维要求。这里的弹性云即是自动化运维解决方案,对访问压力进行监控,根据监控解决调度应用的发布和回收。
2017 年末,非侵入式的 Service Mesh 技术从萌芽到走向了成熟。
Service Mesh 又译做“服务网格”,做为服务间通讯的基础设施层。
若是用一句话来解释什么是 Service Mesh,能够将它比做是应用程序或者说微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控。对于编写应用程序来讲通常无须关心 TCP/IP 这一层(好比经过 HTTP 协议的 RESTful 应用),一样使用 Service Mesh 也就无须关系服务之间的那些原来是经过应用程序或者其余框架实现的事情,好比 Spring Cloud、OSS,如今只要交给 Service Mesh 就能够了。
Service Mesh 的前因后果:
Service Mesh 有以下几个特色:
Service Mesh 架构图:
关于微服务和服务网格的区别,个人一些理解:微服务更像是一个服务之间的生态,专一于服务治理等方面,而服务网格更专一于服务之间的通讯,以及和 DevOps 更好的结合。
---------------------
Reference:
1,微服务架构初探