微服务和无服务是最近几年非常火的话题,一个强调服务的拆分,一个强调服务的无感知,两者共同为开发者提供了开发的便利,通过微服务,每个开发者可以只关注自己的服务模块,降低了代码的耦合,通过无服务,开发者可以只关心业务功能,而无需考虑服务资源的伸缩扩展。
microservice
微服务,顾名思义,就是将大的服务拆分成一个个微小的服务,每个微小的服务彼此独立,并且每个微服务都可以单独运行,它们之间通过rpc或者rest进行服务的通信。通过松散的耦合,开发人员可以专注于每个微服务,开发出更高效,更健壮的程序。
serverless
无服务,没有服务器的意思,怎么可能!!!
它的意思是将服务器资源进行抽象,开发者不需要关心服务器资源的问题,将服务器资源交给第三方云平台来提供,开发者只专注于业务的编写。
比如,开发者开发一个上传照片的服务,原本开发者需要考虑大量用户上传导致服务器资源占用的问题,通过无服务架构,开发者可以只专注于开发功能,而服务器资源的调度完全交给第三方资源服务商即可。
serverless和faas很像,或者说serverless就是通过faas来实现的。开发者通过编写函数功能来调用服务器资源,基于事件驱动的原理,每次发生调用,就消耗一次服务器资源。
包月还是流量计费
对于流量的使用,我们通常有按照流量计费和包月计费两种。如果每月使用的流量少,那么按照流量计费便宜,如果每月使用的流量多,那么按照包月计费便宜。但是一般情况下,按照包月计算的话,流量的最高速度没有按照流量计费的快。
同理,无服务也是类似,我们可以每月无限次地调用服务,但是每时调用服务有上限,或者是我们按照每次调用数量来计费,这是无服务提供给我们的服务方式。
分久必合合久必分
天下大势,分久必合合久必分。软件开发亦是如此。最早的时候,人们将所有的服务都放到一起,这样方便管理,也方便部署。后来人们将服务拆分成一个个独立的微服务单独部署。再后来,人们将所有的服务封装成要给整体黑盒子,统一对外面提供服务。
总结
微服务也有着自己的缺陷,比如服务之间的管理和通信,无服务架构也有着自己的缺陷,比如服务的分析调试等。
给我们充分的自由,我们反而不知道如何去自由。
反之,给我们封装好的黑匣子,我们又渴望探究盒子内的构造。
没有完美的软件,只有不断追求完美的人。