用 Docker 构建 Serverless 应用
Serverless 不意味着没有服务器,而是从应用可以在一个抽象层上忽略它的存在,而只关注在功能实现上和自身的请求处理上;每一个功能实现在不是单纯的业务逻辑处理的代码,相反每个功能调用具有了 Server 的特质,进化成为了一个具有自省、自知和自治的工作负载单元;他们更像是能够衍生出其它新功能单元的生物体。这样整个 Serverless 应用架构之内,每个生命可以衍生下去,子子孙孙无穷匮也。
处在这技术日新月异的时代里,新的技术浪潮经常对当前的技术产生着威胁和颠覆。在编写应用的时候我们目前经常谈论到“Serverless”技术。它的核心思想是把应用作为一系列的功能/function来部署,这些功能在需要的时候被按需部署。服务器管理应该是不需要去操心的事情,所有功能被按需调用,被运行在群集之上。
但是 Serverless 里不意味着没有 Docker,事实上 ”Docker 就是 Serverless”。你可以用 Docker 来容器化这些功能,然后按需地运行在 Swarm 群集上。Serverless 是一种构建分布式计算的应用的方法,而 Docker 是完美的构建和运行他们的平台。
从 Server 到 Serverless
那么我们如何来编写 Serverless 的应用?让我们先看下这个例子:“一个有5个子服务组成的投票应用”:
它的结构如下:
1. 两个 Web 前端
2. 一个后台的处理投票的 Worker 服务
3. 一个处理投票的消息队列
4. 一个数据库
那个后台处理投票的进程是非常容易成为转换为 Serverless 架构的目标。在投票应用内,我们可以运行一点类似于下面的代码,来执行后台任务:
Worker 和消息队列能用按需在 Swarm 上运行的容器来替换,并自动地按需扩容。
我们甚至可以消除掉 Web 前端。我们可以这么做:用 Docker 容器来相应每一个HTTP 请求,每个 HTTP 请求都用一个自生长的跑着轻量 HTTP 服务器的容器来处理。之前使用的是长时间持续运行的 HTTP 服务器,现在变成了具有 HTTP 相应和处理能力的按需跑起来的容器,而且他们能自动地扩容来支持所有访问请求。
我们新的架构大概如下图所示:
其中红色的方块是需持续长期运行的服务,而绿色方块成了按需被调用的 Docker容器。这样这个应用变成了只有少数几个需要被管理的 long-running 服务,在相应请求的时候使用原生的 Swarm 扩容能力,处理能力的上限是 Swarm 群集的上限。
具体如何实现
这里有三个有用的技巧,可以在你的程序中使用:
1. 把你代码中的 function 作为按需拉起的 Docker 容器
2. 使用 Swarm 在群集上运行这些容器
3. 从容器里面运行这些功能容器,绕过了一个 Docker API socket
使用以上技术的组合,程序执行负载发生的可能性将和您如何架构你的应用相关。运行后台任务就是一个非常适合的例子,但是整个应用中的其它工作负载也是有可能的,例如:
1.考虑到延迟,用启动一个容器来服务所有用户的 HTTP 请求可能是不现实的。可是你可以写一个内置的负载均衡逻辑,让它知道何时需要主动地自动扩容 Web 前端自身,通过在 Swarm 群集上运行更多 web 处理容器。
2.一个 MongoDB 容器可以在 Swarm 上成为一个具有自省能力的架构,它能自动地运行出正确数量的 shard 和 replica 容器。
接下来
我们已经得到了这些激进的新工具,用做构建应用的抽象层,我们隐约看到了如何深入下去的可能性。我们依然像长时间以来在一堆服务器上构建应用一样,而以后可以来利用 Swarm 能按需地在基础架构里的任何地方执行功能代码的能力。
希望这些能够给您一些如何构建应用的新思路,但是我们还需要你们的帮助。我们已经有的是一些构建 Serverless 应用的基础功能,然而他们依然不是很完备,我们需要更好的工具、库、样例程序,文档等等。
本文作者:佚名
来源:51CTO
用 Docker 构建 Serverless 应用相关推荐
- jenkins pipeline api获取stage的详细信息_Jenkins + Docker 助力 Serverless 应用构建与部署...
本文来源: ServerlessLife 公众号 近日,使用 Serverless 开发了一个应用.其中 CI/CD,是需要考虑的一个问题.这里用到了 Jenkins 和 Docker.并且 Jenk ...
- 利用Azure Functions和k8s构建Serverless计算平台
题记:昨晚在一个技术社区直播分享了"利用Azure Functions和k8s构建Serverless计算平台"这一话题.整个分享分为4个部分:Serverless概念的介绍.Az ...
- Docker构建Nginx+Tomcat动静分离架构
随着主流Nginx WEB服务器的发展,现在基于Nginx的WEB服务器已广泛应用于各大互联网企业.今天我们来使用docker构建我们的Linux+Nginx+Tomcat动静分离服务器. 1) ...
- 用 Docker 构建、运行、发布来一个 Spring Boot 应用
原文同步至 http://waylau.com/docker-spring-boot/ 本文演示了如何用 Docker 构建.运行.发布来一个 Spring Boot 应用. Docker 简介 Do ...
- docker 构建上下文 理解
目录 对 Docker 构建上下文的理解误区 理解 Docker 的架构 理解 docker build 的工作原理 正确理解 Docker 构建上下文 对 Docker 构建上下文的理解误区 我们都 ...
- iis7 您无权使用所提供的凭据查看此目录或页面。_使用Spring Cloud和Docker构建微服务架构
原文:https://dzone.com/articles/microservice-architecture-with-spring-cloud-and-do作者:Alexander Lukyanc ...
- 永信至诚CTO张凯:CloudStack+Docker构建云端信息安全实验场
5月14日,2016中国云计算技术大会(CCTC)在京召开,作为本次大会的亮点环节之一--Container技术峰会吸引了众多业内人士的关注.本届Container技术峰会不仅注重前沿技术的分享,在容 ...
- 视频私有云实战:基于Docker构建点播私有云平台
私有云是为一个客户单独使用而构建的,因而提供对数据.安全性和服务质量的最有效控制.前置条件是客户拥有基础设施,并可以使用基础设施在其上部署应用程序.其核心属性是专有的资源.本篇文章将会结合网易云信的实 ...
- 使用docker构建并测试一个基于Sinatra的Web应用程序
内容来自<第一本Docker书>5.2节和博文整理而成 使用Docker构建并测试Web应用程序 在这个例子里,我们将创建一个应用程序,它接收输入的URL参数,并以JSON散列的结构输出到 ...
最新文章
- 算法工程师必知必会10大基础算法!
- 查找字符串末尾含关键字_Excel教程:用find函数带关键字提取杂乱文本
- C# OracleParameter 传参 实例
- [FJOI2007]轮状病毒
- HTML5与JavaScript
- python中的super用法详解_【Python】【类】super用法详解
- HDU 2859 Phalanx (dp)
- ipv6的127位掩码如何表示_子网掩码
- Struts2基础知识(三)
- SQL Server IS NULL语句使用举例
- 电商峰值系统架构设计
- MSG数据(EUMETSAT)和GOES数据(NOAA)下载
- SACD ISO镜像中提取DSDIFF(DFF)、DSF文件
- bp神经网络的算法步骤,BP神经网络算法流程图
- 性能碾压Notepad++的文本编辑器UltraEdit,程序员必备
- 最新版chromium 76如何支持xp
- Oracle首席工程师四火:技术面试中,怎样的问题才是好问题?
- 【题解】【AcWing】1526. 洗牌机
- ABAQUS中inp文件的使用和书写
- 使用Microsoft SQL Server Management Studio连接远程阿里云SQL Server数据库