驱动技术的,历来都不该该是技术,也不是情怀,应该是不断变化的诉求。html
在过去的不知道多少年前,咱们的应用和数据库,还部署在一台机器上,大概以下:数据库
+----------+ +--------------+ | | | | | | | | | | | +--------+ | | +--------------------> | | | | | | | App | | | | <------------------+ | ^ + | | | Client | | +--------+ | | | | | | | | | | +--------+ | | | | | + v | | | | | | DB | | | | | | | | | | | +--------+ | | | | | | | | Server | +----------+ +--------------+
随着业务的增加,这样的架构已经不能知足大量的请求,这时候架构也随之改变,把应用与数据库拆分开来:架构
+--------+ +---------+ +-------+ | | | | | | | +-------------> | +-----------> | | | Client | | App | | DB | | | <-------------+ | <-----------+ | | | | | | | +--------+ +---------+ +-------+
固然,业务是不停的增加的,而上述这样的也会发生变化,能够把应用与数据库进行集群部署。运维
而后...分布式
而现在,技术与架构,在业务的驱动下,早已发生了巨大的变化。模块化
在最近两年,最火的,莫过于服务化,容器化与云化。微服务
微服务架构,它把软件围绕业务功能结构进行划分、拆解成服务,以服务构建应用,而服务能够独立部署、独立扩展,服务也能够提供模块化的边界,而且不一样的使用也可使用不一样的开发语言。学习
微服务风格的特性:测试
容器,另外一个热门的话题,而在这个话题中,咱们可以快速想到的,应该是Docker。ui
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3月以 Apache 2.0 受权协议开源。
Docker包括三个基本概念镜像、容器、仓库。镜像和容器的关系,就像是面向对象程序设计中的类和实例同样,镜像是静态的定义,容器是镜像运行时的实例;容器能够被建立、启动、中止、删除、暂停等;而仓库,则是用来统一存储镜像,进行版本控制。
使用容器技术,带来了如下好处:
容器云是以容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员提供用于构建、发布和运行分布式运用的平台。
当容器云专一于资源共享与隔离、容器编排与部署时,它更接近传统的IaaS;当容器云渗透到应用支撑与运行时环境时,它更接近传统的PaaS。
使用容器云,带来了如下好处:
当软件服务化后,咱们的架构看起来应该是这样的:
+-------+ +--------------------------------------+ +--------------------------+ | | | | | | | | | WebUI | | App | | | | | | | | | +--------------------------------------+ +--------------------------+ | | | | +-------------------------------------------------------------------+ | | | | | | | RESTful API | | | +-------------------------------------------------------------------+ | | | | +-----------+ +-----------------------------------+ +-------------+ | | | | | +-----------+ +------------+ | | | |Monitor| | Registry | | | Ser^ice1 | | Ser^ice2 | | | Configure | | | | & | | +-----------+ +------------+ | | | | | | Dsco^ery | | | | | | | | | | +-----------+ | | | | | | | | | ... | Ser^ices | | | | | | | | +-----------+ | | | | | | | | | | | | | | | | | | | | | +-----------+ +-----------------------------------+ +-------------+ | | | | +-------------------------------------------------------------------+ | | | +-------------+ +------------+ +----------+ | | | | | DB | | MQ | | ... | | | | | +-------------+ +------------+ +----------+ | +-------+ +-------------------------------------------------------------------+
众多的服务给运维带来极大的挑战,要求可以快速地发布与容错处理,而若是再使用人肉运维的方式再也没法知足。
这时候,一个借助于CI/CD的研发流水线的开发方式,渐渐进入了视野:
+--------------+ +------------+ Re^iew +--------------+ | | | +-------> | | | Developer | Push | | | Maintainer | | +--------> | Repo | Merge | | | | | | <----+ | | +------+-------+ +-----+------+ +--------------+ ^ | | | | v Trigger | | +------------+ Feedback | | | CI | | CD | +----------+ CI/CD +-------------+ | | | | | | v +------------+ v | +-------------------------------+ +--------------------------------------+ |-------+ +-------+ +--------+ | | | ||Build +-> Unit +->Analyze +-+| | +---------+ +---------+ +---------+ | |-------+ +-------+ +--------+ || | |Test Env | |UAT Env | |Production | |-------+ +-------+ +--------+ || | | | | | | | | ||Deploy<-+Package<-+ Test <-+| | +---------+ +---------+ +---------+ | |-------+ +-------+ +--------+ | | | +-------------------------------+ +--------------------------------------+
能够借助容器与容器云,将服务进行持续集成、持续部署与交付,最终达到自动化。
服务化是将来吗?容器是将来吗?容器云是将来吗?
谁知道呢?将来,还没来!
只是如今,做为一枚面向搜索引擎复制粘贴的开发者,在不停的学习中,开拓本身的视野,积累本身的经验,为后来的业务需求打下坚实的基础也是势在必行。
参考: