微服务发展历程
微服务并不是15年、16年才出现的一个东西,而是很早以前我们就提出了一个概念——面向服务开发(SOA)。SOA出现至少有15年了,在EJB那时代就已经提出这样一个概念。其实那时候就已经发现了传统用户的问题,提倡不要再面向应用开发了,要面向服务开发。
比如一个应用会有项目管理、采购管理、建设管理部分,就将各个部分拆开,项目管理是一个大的业务系统,采购管理也是一个大的业务系统,等等。它们之间有可能需要相互通信,那会采用相应的手段。这就是当时的SOA。
SOA带来的问题还是很大的,即便按照服务开发了,那每一个服务对我们来说还是太重了,这种情况就引入了比较火的概念——微服务开发。
其实我们可以看出来,“面向服务开发”和“微服务开发”之间就差一个“微”字。
SOA概述
我们有个应用,里面有权限系统、用户系统。。。等等一系列部分。我们将它拆了,变成里面有一个权限系统、用户系统,它们之间需要通信,怎么办呢?通过WebService(很多年前的技术了,很多同行都听过,甚至公司有用过)消息组件进行交互。这样带来了两个特点:
- 应用就由原来大而杂的系统变成了相对比较清晰的系统
- 可以使用WebService把权限系统和用户系统做数据的交换
微服务概述
-
微服务是一种将业务系统进一步拆分的架构风格
微服务本身不是一项技术,我们说的dubbo、springcloud这些是微服务的展现。微服务本身是一个架构风格。我们将一个系统分为权限系统、用户系统,其实还是一个比较大而杂的系统,它其实并没有提供一个从根本上解决问题的思路。微服务就希望将拆分后的系统再进行拆分。我们很多同行应该解触过WBS工作任务分解,WBS有一个要求——尽可能的分到最细最细的单元,这样对我们来说才是更好的。而微服务强调的也是类似的概念,就是说原来一个大的业务系统,里面有1、2、3、4、5,5个子模块,那这5个子模块都拆成微服务,也允许它们之间相互通信。
-
微服务强调每一个单一业务都独立运行
一个业务系统——用户系统,里面包含了登录、退出等等业务,那这些业务在一个用户系统,它们共享的是一个jvm,或者说一个应用占一个独立的进程。微服务呢,就是要强调每个独立的业务都要占一个应用(一个独立的进程),这样就进行了资源的拆分。 -
每一个单一的服务都应该使用更轻量的机制保持通信
SOA保持通信其实更多的是通过接口,WebService就是它的表现形式的一种。微服务里一般会使用更轻量的协议,而不会使用类似于WebService这种比较重的,比如会使用我们常听到的http、tcp这两种机制去保持相互的通信。甚至还有可能是jvm进程之间通信。 -
服务不强调环境,可以不同语言或数据源
对于运行的系统是Windows还是Linux,语言是Java还是Python,数据源是MySql还是Redis,不关心,永远只面向于单一的服务。至于这个服务到底是怎么来的不关心,只关心这个接口能不能给我提供一个业务功能。
微服务选择
目前来讲,市面上的微服务以下3种为主:
- Dubbo
是阿里开源的一个框架,是当前速度是相当快的一个框架。 - Spring Cloud
跟dubbo相比,还不太一样。Spring Cloud其实是一个微服务的集合,里面提供了各种各样微服务治理的方案,比如Api网关zuul、负载均衡、服务降级回退等等一系列东西。 - Zero ICE
用的不太多,但确实有的公司在用的一个微服务框架。是国外的开源的,使用的是二进制流做的通信。之所以用的不太多,主要就是文档太少,它的社区也不是特别活跃,感觉上并没有Dubbo和Spring Cloud成熟
上面这些就是微服务的一些,大家需要了解的东西。