随着云服务的兴起,企业应用正在从分层式架构逐步迁移到互联网架构。传统的企业应用架构通常是单一架构(Monolithic),即典型的MVC三层架构。以一个主流的J2EE企业应用而言,其按照模型(数据层)——控制器(服务层)——视图(访问层)进行构建,然后打包为一个war包,部署运行于J2EE应用服务器上,例如Tomcat、JBoss、WebLogic等。 
 
然而,经过多年应用,Monolithic架构也逐渐老化,越来越不适应技术的发展。首先,随着加入的应用功能增多,产生了代码堆积现象,系统越来越庞大和复杂。尤其是引入敏捷开发后,产生了较多问题。例如应用持续集成方法时,自动加载、编译、加载、测试整个应用代码的时间过长,不能快速形成正反馈。其次,组件与组件之间的耦合性太强,所有应用都运行在服务器上的相同进程中。应用规模增大后,只有同时增加应用的副本,将多个副本部署到多个服务器上,无法实现弹性伸缩。最后,开发团队之间,工作交集复杂,协调耗散大。

从长期实践看,Monolithic架构天然的不具备健壮性,因为一旦某个组件出现问题,整个服务基本上就挂了。自身不具备分布式服务能力,通常需要依赖于负载均衡器、数据库HA等来实现服务的分布化和负载分担。相对而言,互联网架构优势在于分布式、去中心化,支持弹性伸缩。其核心是轻应用、微服务。微服务架构也是从Monolithic架构演进来的。Monolithic应用中按照职责的不同,拆分解耦成一个个的单独微服务(Micro Services),每个微服务都对应了一个独立的业务功能,也只定义了该功必须的一些操作。从下图可以形象的说明。 
 
微服务独自或者共同部署在多台应用服务器上,微服务之间通过标准的Restful接口实现访问。这样当一个微服务出现问题时,并不会影响到其他的服务。而且,微服务可以基于资源的需求进行独立扩展,可以被部署在更小的主机上。各个微服务使用的开发语言也可以不同,只要保持接口协议统一。

随着移动互联网的爆发,越来越多的采用前端手机APP(Native或HTML5)+后端应用(Java、NodeJS等)的开发/部署模式,两者之间通常采用Restful方式实现通讯,天然的实现了前台和后台的解耦,这也为微服务的流行提供了根本动力。

然而,不容忽视的是,微服务同样存在一些劣势。因为微服务通常部署在多个主机上,所以大量微服务的管理也成为一个难题。如果微服务使用不同的编程语言将开发,这就意味着每个服务的部署都需要完全不同的库和框架,从而服务的部署会非常复杂。 
幸运的是,Linux容器技术的使用可以很大程度上缓解微服务架构所带来的问题。Linux容器技术使用了类似cnames和namespaces这样的内核接口,它允许不同容器共享相同的内核,同时容器之间还进行了完全的隔离。

目前流行的Linux容器主要有Docker和Rocket。以Docker为例,Docker执行环境使用了一个被称为libcontainer的模块,它标准化了这些接口。Docker同样为容器镜像提供了一个类GitHub的资源库DockerHub,让容器的共享和发布非常简单,也正是这种相同主机上的容器隔离简易了不同语言开发的微服务代码部署。使用Docker,我们可以创建一个DockerFile来描述所有用到的语言、框架和服务间库的依赖性。 
 
将微服务应用放置在容器中,带来了快速与可移植性。从开发、测试、上线,实现了“一次编写,到处运行”。

总之,通过容器、微服务的有效结合应用,最终帮助企业应用演进到互联网架构,实现IT投资和收益的最优化。

来源:华为云社区  作者:docker君

容器、微服务和互联网架构浅谈相关推荐

  1. 应对海量并发请求,首席布道师谈微服务的应用架构设计

    何李石 七牛云首席布道师 <Go语言程序设计>译者,Go语言/容器虚拟化技术布道师.实践者. 5年以上互联网创业经验和企业级产品研发.运营经验,同时也是互联网产品基础架构解决方案专家. 随 ...

  2. 阿里P8 “布道师”,谈微服务的应用架构设计(附微服务教程)

    本次分享基于微服务的应用架构设计,内容涉及如何构建一个微服务应用,服务注册与发现,微服务测试和典型的微服务架构设计模式,以及微服务架构在七牛的实践案例. 目录 构建一个微服务应用 服务注册与发现 微服 ...

  3. 资深架构专家讲解微服务治理的架构演进

    摘要:随着业务的发展,规模扩大,服务越来越多,需要协调线上运行的各个服务,保障服务的SLA;基于服务调用的性能KPI数据进行容量管理,合理分配各服务的资源占用;对故障业务做服务降级.流量控制.流量迁移 ...

  4. 大型直播平台应用架构浅谈

    大型直播平台应用架构浅谈 进入直播领域有段时间了. 跟大多数同学一样,刚接触直播这个领域都非常好奇这个领域的宏观架构大概是什么样子的. 这里根据自己的这段时间学习,粗浅总结下分享给感兴趣的小伙伴扫扫盲 ...

  5. 分布式微服务企业快速架构之SpringCloud分布式、微服务、云架构快速开发平台

    鸿鹄云架构系统管理平台是一个大型企业.分布式.微服务.云架构的JavaEE体系快速研发平台,基于模块化.微服务化.原子化.热部署的设计思想,使用成熟领先的无商业限制的主流开源技术(Spring Clo ...

  6. 未来我们对微服务和 Serverless 架构有什么期望

    Juan Ignacio Giro | 作者 梁桂钊 | 译者 技术正在以令人难以置信的速度发展,所以在市场上看到新的技术趋势并不新奇.由于微服务的进步,更强大的云计算,以及 Serverless 架 ...

  7. javaweb k8s_K8S微服务核心架构学习指南 ASP.NET Core微服务基于K8S 架构师必备Kubernetes教程...

    K8S微服务核心架构学习指南 ASP.NET Core微服务基于K8S 架构师必备Kubernetes教程 课程内容是关于Kubernetes微服务架构学习课程,基于K8S开展ASP.NET核心进行微 ...

  8. 微服务和SOA架构的区别

    经常会有同学问,微服务和SOA架构有什么区别.这个区别一定要从架构的发展过程来了解.这两种架构模式,其实本质上应该是在分布式架构这条时间线上,基于服务化思想的不断完善,以及基础设施的逐步成熟之下的一种 ...

  9. 为什么Segment会从微服务退回单体架构?

    近年来,我们发布了很多文章介绍企业向微服务迁移的成败经验.最近,Segment的Alexandra Noonan写了一篇文章,讲述了他们从单体架构迁移到微服务,之后又退回单体应用的经历.文中Alexa ...

最新文章

  1. java 启动 jetty_如何通过命令行启动或者关闭 Jetty 服务器
  2. python得到一个excel的全部sheet标签值
  3. 深入理解Java中的String
  4. LOL手游2.3版皮肤大更新,端游玩家:新春级和珍稀级会返场吗
  5. 以太坊geth区块链私链建立
  6. 2021-02-23 天地图图层类型总结
  7. Linux shell脚本基础学习(上)
  8. 程序员是怎么分享微信二维码的
  9. 关于使用硬改的路由器的各种经历
  10. 网卡设置不当造成断线
  11. 设备驱动中的并发控制-自旋锁
  12. 源码级剖析了 Naive UI 的 Button 完整过程
  13. vue数据更新,页面不更新
  14. html图片折叠,CSS 实现 图片鼠标悬停折叠效果
  15. java/php/net/python宅急送管理系统设计
  16. python form data request_请问Flask的request.form和request.data有什么区别?
  17. Pixhawk学习4——Commander相关分析
  18. 音乐制作软件中文版-Cubase Elements 8.0.35 WiN
  19. linux系统清除redis信息
  20. PDF如何转换成EPUB格式?PDF转EPUB常用方法分享

热门文章

  1. C语言输入密码为6位,C语言中如何实现输入密码?(在输入时显示为*号.)
  2. 手机远程linux桌面,centos8安装xrdp远程桌面,Android手机连接linux桌面
  3. 简单编程代码表白_用简单代码实现抖音表白神器
  4. java同时输出多个数字_java从命令行接收多个数字,求和之后输出结果
  5. 什么是股票的发行价和市价
  6. Oracle删除重复数据并且只留其中一条数据
  7. Oracle DBA 经典面试题
  8. 为ASP.NET MVC应用添加自定义路由
  9. Tomcat访问日志详细配置
  10. 理解Java对象序列化——Serializable接口