AWS入门指南之四:微服务以及Lambda

这篇文章我们聊一聊微服务的概念,和aws里与微服务关系比较紧密的一个计算服务:Lambda。

什么是微服务(microservice)?按照维基百科的定义,微服务是面向服务架构(servcie-oriented-architecture - SOA)的变体。服务是许多松散耦合的服务集合。在微服务中,服务是细粒度的,协议是轻量级的。那么什么是面向服务架构呢?SOA是一种设计方式,它基于一种理念是系统中的每一个部件利用网络通信协议向其它系统部件提供远程服务。所有的部件功能应该是独立的。microservice和SOA从总体上看是一种理念,但是micro service更加强调所有服务组件的细粒度和轻量级。所以我们可以只谈谈microservice在AWS里的应用。

微服务的设计理念有一些优势。首先微服务是很容易进行扩展的。因为服务是轻量级而且独立的,很容易将它们部署在独立的小规模的物理设备上。在需要进行扩展时,很容易对从底层物理框架到上面的逻辑功能组件进行复制以达到扩展的目的。其次,微服务是很容易部署的。因为所有的服务独立而轻量,服务可以进行分开部署,而且部署会非常简单。再次,微服务的设计非常灵活,可以分批次分别实现和逐步上线。而因为服务之间的松耦合,可以使用不同的开发语言和开发技术分别开发不同的服务组件。

对于微服务和传统的大型服务设计方式那种更优其实没有固定的结论,必须要更具实际情况而定。但是不可否认的是,伴随着网络建设的大幅前进,为微服务这样一种新颖的设计方式提供了可能性,以至于在很多情况下微服务可以带来传统的统一服务设计和管理所不具备的多个优点。而云计算这种大规模的分布式和多种功能资源集于一身的产品的出现,更是为微服务的开发和维护都带来了前所未有的便利条件。其实总结下来我们会发现伴随着网络基础设施的愈发完善,软件设计的总体趋势从传统的集中大规模的方式慢慢转变为分布的小规模的模式。虽然分布式系统中的每一个部件看起来是简单的,规模很小的,但是当大量这样的功能部件组合在一起后,就可以完成非常复杂的大规模计算功能。优势显而易见在于维护的复杂度大大降低,扩展的能力又大大提高了。而因为大量复杂的功能由网络基础设施和分布式系统提供,使得服务开发者可以更加专注于服务功能的设计和开发,从而降低了开发的负担和复杂度。但是相应的在分布式系统中开发有着不同于传统服务模式开发的模式和要解决的问题。而这是之前专注于传统服务开发的程序员需要重新学习的地方。

对于AWS来说,更是为微服务开发方式提供了完备的解决方案。具体的信息可以阅读参考文档1。在这篇博客中,我们具体聊一聊和微服务计算有关的一个服务:Lambda. 

Lambda是AWS提供的一种无服务器服务。简单来说就是AWS为你提供服务运行的环境,而你只需要实现你的服务的逻辑。这个听起来是不是和微服务非常契合?其实Lambda可以说是在AWS中实现微服务的最佳候选服务。Lambda有一个Currency池。当有一个触发来到,Lambda就会从Currency池中运行一个Currency来执行该次触发。而Lambda可以响应的触发有很多种,比如DynamoDB,S3,SQS等等。作为服务的提供者,最常见的组合方式是由APIGateway提供终端的访问能力,而Lambda响应来自APIGateway的请求提供计算服务。假如有些同学对于Amazon的智能设备Alexa感兴趣的话,会发现Lambda也是可以响应Alexa的,所以几乎所有的Alexa的后台处理都是在Lambda上完成的。在后面我们可以实际用Lambda开发一些简单的功能让大家来体会一下Lambda所带来的便利性。

总之Lambda作为AWS中非常灵活和功能强大的服务之一,是在AWS中提供微服务的计算能力的上上之选。还有另一个基于Container的服务叫做ECS (Elastic Container Service)也是提供计算能力的很流行的服务之一,但是Lambda还是要更加灵活和简单一些。所以假如可能我们应该首先选择Lambda。关于ECS我们放在后面介绍。

 

 

参考文档:

  1. https://aws.amazon.com/microservices/
  2. https://aws.amazon.com/lambda/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章