云场景实践研究第14期:南京路特软件

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: 通过使用阿里云容器服务,较好地解决了其所面对的敏捷、成本、可靠这困扰南京路特的三大核心问题。当然,在这一过程中,南京路特也在Docker实践中不断踩坑,也不断地总结经验教训,并总结出了适合中小企业实践Docker技术的两个常用场景。

更多云场景实践研究案例,点击这里:【云场景实践研究合集】联合不是简单的加法,而是无限的生态,谁会是下一个独角兽

南京路特软件的产品线内子产品太多,并且相互有重叠,导致基础服务大量重复,并且无法在开发阶段将其拆开,面对40台服务器和一堆服务,公司却仅有一个专职运维人员,此外,公司的持续交付产品/服务效率非常低,也无法有效掌握负载峰谷,进而合理调配资源。通过使用阿里云容器服务,较好地解决了其所面对的敏捷、成本、可靠这困扰南京路特的三大核心问题。当然,在这一过程中,南京路特也在Docker实践中不断踩坑,也不断地总结经验教训,并总结出了适合中小企业实践Docker技术的两个常用场景。

“从痛苦到曙光,从濒临放弃到看到曙光,再到磕磕绊绊行至远方,感谢我们所有的媒体客户和阿里云默默的支持。路还很长,你我同在...”

——戚俊

南京路特软件有限公司CTO


采用的阿里云产品
  • 阿里云云服务器 ECS
  • 阿里云负载均衡 SLB
  • 阿里云文件存储 NAS
  • 阿里云对象存储 OSS

为什么使用阿里云

敏捷、成本、可靠是南京路特面临的三大核心问题。使用阿里云容器服务可以帮助开发人员实现敏捷开发,降低业务成本,提高系统的可靠性。

阿里云容器服务可以通过设置参数进行配置,当集群挂掉之后,可以有办法把容器放到另一个集群里面去。


关于 南京路特软件

南京路特软件有限公司是国内专业的媒体融合解决方案的提供商和服务商,国内领先采用云计算技术和互联网服务模式的媒体融合解决方案,已取得多项国家发明专利和软件著作权,目前发布的服务产品:全媒体系统、内容发布系统、智慧掌媒系统、数字报系统、微媒体系统、融媒体应用平台等。


南京路特使用阿里云容器服务之前所遇到困境

南京路特在使用容器服务之前的系统遇到了很多挑战,首先是产品线内子产品太多,并且相互有重叠,进而导致基础服务有大量的重复,如邮件服务、短信服务等,但在开发阶段,无法将其拆开。其次,在运维方面,目前全公司共有40台服务器和一堆服务,但只有一个全职运维人员。最为核心的问题是公司的持续交付产品/服务效率非常低,导致人力的极大浪费和挥霍。此外,传统架构设计无法有效掌握负载峰谷,并且无法合理调配资源。并且公司对可靠性和安全性的要求非常高。每天有几百家媒体依赖公司产品进行生产,但公司却无法提高业务可靠性。


南京路特使用容器服务之前的架构设计

47c6a3c3de132fbb263b6bdeb8d134dbdfbc304e

如图所示的是南京路特使用容器服务之前的架构设计,每一行都是相同的。一堆客户去访问一个公网IP,这个IP背后可能是一台ECS服务器,然后ECS服务器中可能部署了一个或多个应用,应用背后对应着阿里云数据库服务或缓存、日志服务等等,这全部组成最小单元。在顶峰时,公司内有多大60个最小单元,涉及到近80台云服务器,进而导致升级、维护问题的出现。最后只能放弃这种方式,因为一旦代码发布之后,需要升级时,只能和客户约定好升级时间,但由于客户都是独立部署的,导致出现今天给这家升级,明天给那家升级的状况出现。


为什么选择阿里云?


南京路特所面临的核心问题

敏捷、成本、可靠是南京路特面临的三大核心问题。敏捷是指敏捷开发、敏捷部署方面;成本是老板和CTO都要关注的问题;可靠性是保障。


容器技术&敏捷开发

容器技术和敏捷开发方面,目前面临的问题有三点:

  1. 统一开发、测试、业务环境。不同的版本、应用、运行环境的差异导致各类问题的出现,而且通常是无法预料的;同时,新入的员工仍需要重复地搭建各种开发、测试、运行环境,导致效率不高。针对这个问题,我们的解决方案是将所有的基础环境极性统一封装并打包在镜像仓库中,新入职的员工,只需将该镜像下载,并在本地调试和开发时,将自己的代码放到镜像中。尽管进行时只读的,但是镜像是有办法和外面硬盘数据互通的。此外,通过这种方式开发、调试代码不会再出现问题,因为所有的镜像都是一致的,与操作系统无关。
  2. 不同时期开发应用如何泾渭分明持续开发。这个问题是很多中小型企业开发团队所面临的痛点。新入职的员工不愿去维护之前的旧代码。应对这种问题,可以采用拆分的方式将应用拆的稍微洗一些,一个大应用中其中几项可以拆分出来变成小应用,拆分之后的维护成本会降低很多。当持续开发时,不需要再去重写这些小应用,只做必要的事。
  3. 亟需解决代码污染问题和手动打包故障。当公司小应用较度时,打包会经常出现这类问题。目前是采用Git自动构建来解决之隔问题,因为它拉的代码是Git里面的代码,而Push分支时,自动创建一个镜像,这种情况下不太可能会出现代码污染或手动打包故障。

容器技术&业务成本

下面看一下容器技术和业务成本之间的联系。目前主要有以下几个方面的成本问题:

  1. 长时间停机更新成本太高、体验太差。之前,我们的更新只能在凌晨三点进行,一旦出现问题,在早晨八点之前要把问题解决掉。这种情况造成了很高的成本,有时候更新代码会耗费一整个通宵,特别是出现回滚时更加麻烦,这个解决方案,之前的演讲人所讲的蓝绿发布其实很好地解决了这个问题。
  2. 多机负载场景下很难做到同一时刻集体更新,出错后回滚成本很高。这个问题采用蓝绿发布也可以解决,我们公司内部采用的是阿里云容器服务内可以去开负数的容器,在容器没有更新完之前,用户是不可能访问到新镜像的内容。
  3. 业务无法精准弹性,仅仅服务器级别的弹性还不够。我们40台服务器里面能占到80%利用率的可能只有三分之一。三分之二的时间,资源都是闲置和浪费的。我们通过容器级别的弹性,例如可以给网站服务或者是API接口的服务开通更多的容器让其提供更好的负载,达到更好的执行效率。这种情况下,一个物理机真正能够提供这种可靠运算资源的这种量会非常大,远比想象中要好。因为正常情况来说,一个机器不可能同时所有的情况都是满载的。

容器技术&可靠性

容器技术和可靠性方面。可靠性其中的一点是在云端整体故障迁移问题暂时很难得到解决,但却是大家都需要的。在云端,大家都忽略了热备这个问题,认为云上不太可能会出现硬件损坏故障的情况,但是事实上是会出现的。阿里的容器服务现在是有参数是可以去配置的,当集群挂掉之后,可以有办法把容器放到另一个集群里面去,可能现在还没有办法很完美的解决域名或者端口的配置的问题,可能还需要手动调节,但这已经很大进步。

对于多机负载场景下数据的同步和共享访问问题。一些老的服务,解耦不好的情况下,它的附件是无法分离出去的,或者存在一些集中读取集中写入的情况,则需要通过共享存储来解决这个问题。目前通过容器服务提供的两种方案解决该问题:一是OSS数据卷;另一个是NAS数据卷。二者都可以支持多个容器访问同一个文件数据源,然后对其实时进行集中写入、读取等操作。


南京路特在Docker实践中所踩过的坑

c4f375e5b10e7bfb94464f373219b848e52f1fca

总结南京路特Docker多年实践所踩过的坑,或许会对大家有所帮助:

  1. 不解耦容器用不好!这是一个很显然的事情,因为如果容器内有一大堆应用,相关性太高了,一旦容器出了问题,很容易导致应用不可用甚至整个业务体系的瘫痪,仅此要将应用解耦,这是一个很重要的问题。
  2. 就是微服务。尽管现在微服务很火热,并不是架构拆分成微服务之后就特别厉害。微服务有它的合理之处,但是不是所有的业务都要去做微服务。通用、重复、可复用的应用可拆开做成微服务。
  3. 就是项目越大越难以使用容器架构。南京路特目前是绝大部分产品在容器服务里,但是不是所有的产品都在容器服务里,有一些比较大的产品是放不进去的。这其中既有自身内部管理的问题,也有产品业务场景的问题和用户的需求问题等问题。项目越大,涉及到面越广,涉及到面越广就难去对它动刀子,把它放到容器集群里去。
  4. 可靠性。不要指望Docker来解决可靠性的问题。Docker和容器技术,可靠性关联的因素相当之多,上到网络环境和整体架构层,下到开发人员的素质。这是因素不是采用Docker就可以解决的。

最后,容器技术它只是一种架构的选择。单机跑Docker就是一种实验,组成集群运行时,才能够真正地发挥它的力量。


Docker容器的常用场景

f7f17b17a3e0ba9736ea617aa833097fffed4112

第一个场景是高效API集群。有时会遇到这种情况,公司内的API有的是可以供外界使用,有的不可供外界使用,但该API可以给公司的APP使用;公司的APP可能是走官网的途径去访问API,同时这个API也可以被内部服务调用。这种情况带来的问题是:当用域名去访问时,在外网调用时不存在问题,但在内网调用的时要走DNS,甚至还要走官网流量通道去访问这些东西。事实上,内网调用的那台服务器跟API服务器可能相隔很近。这种情况下可以通过一个模型去解决该问题:内部服务器发起调用时,采用内网的负载均衡(阿里的内网负载均衡是不收费地);外部调用时,采用外网的负载均衡(大概只收取流量费);这两个分别连接到API的容器集群(容器集群就是阿里的容器服务),容器集群内部做好相关的配置工作。这样做的好处是:当集中使用该服务时,可以自由的选择。云上的调用可以通过内网的SLB完成;外网的调用可以通过外网的SLB去完成,可以得到一个最大化和一个最可靠的访问效率,外网访问时,可能是10毫秒;内网访问时,在1、2毫秒左右。

e4aa4b532467bb308fe432160ca7c5cb3814b0bb

第二个场景是快速交付应用/服务。因为公司的本身是做SaaS服务和应用软件的。大部分工作是协助开发和客服性质的工作,以及一些部署性质的工作也需要开发去完成。我们采用一个模型去解决问题。研发完成产品镜像之后,将镜像提交到代码仓库中;运维人员进入容器服务,然后创建一个集群,通过编排模板直接创建一个应用,应用创建之后去修改服务的配置。因为容器与原来所熟知的代码的运行方式不太一样,有一些配置文件需要修改等。目前解决方式是把所有的配置都写在容器环境变量里面,这也是主流的一种方法。然后修改服务配置、修改环境变量、重启服务。重启服务之后,容器重新启动之后会读取一个环境变量作为它的配置,这样就可以成功运行了。


关于南京路特软件的更多实践详情:中小企业Docker实战:那些年我们踩过的五个坑
原文发布日期:2016-08-25
云栖社区场景研究小组成员:贾子甲,仲浩。

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4月前
|
运维 安全 测试技术
DevSecOps来袭,传统软件安全模式OUT了?新思维让你眼界大开,看完这篇秒变专家!
【8月更文挑战第6天】近期深入探索了DevSecOps,这是一种革新软件安全的开发运维模式。它将“安全”全面融入“开发”与“运维”,构建自动化安全体系。不同于传统事后安全检测的方式,DevSecOps强调安全贯穿软件生命周期始终。借助CI/CD管道集成安全扫描工具,确保每次代码提交均符合安全标准。例如,在CI管道中加入静态代码分析工具SonarQube,自动执行安全检查。DevSecOps不仅是技术实践,更代表文化与管理的变革,促进跨职能团队协作,共同保障软件安全与质量。未来,DevSecOps有望成为软件开发领域的主流实践。
44 1
|
7月前
|
算法 vr&ar UED
硬核解决Sora的物理bug!美国四所顶尖高校联合发布:给视频生成器装个物理引擎
【5月更文挑战第16天】美国四所顶级高校联合推出PhysDreamer,将物理引擎集成到视频生成模型,以实现更真实的3D对象动态交互。该技术利用动态先验知识估计物体物理属性,生成逼真的动态视频。实验显示PhysDreamer在动态逼真度上超越现有方法,但在计算成本和处理复杂物理交互方面仍有局限。研究团队对未来持乐观态度,期待改善效率并扩展应用范围。这一创新将推动虚拟体验技术的发展,增强VR/AR的沉浸感和多领域应用。[论文链接](https://arxiv.org/pdf/2404.13026.pdf)
69 2
|
7月前
|
传感器 运维 定位技术
网安预习课程硬件延伸
本篇博文是一篇关于计算机硬件、软件、网络知识和故障排查的摘要。主要内容包括: 1. 应用软件: 2. 电脑故障分析: 3. 网络介绍与分类: - 总线型网络:简单、成本低,适用于小规模网络。 - **环形网络**:中心节点故障会导致整个网络失效,常用于分布式系统。 - **星形网络**:管理和扩展方便,但中心节点至关重要。 - 网形网络:高冗余和可靠性,适合对可靠性要求高的环境。 4. 网络类型: 5. IP地址: 涵盖了计算机硬件、软件故障、网络基础和IP地址等多个IT领域的基础知识,是学习计算机科学和技术的入门内容。
|
7月前
【软件设计师—基础精讲笔记11】第十一章 标准化和软件知识产权
【软件设计师—基础精讲笔记11】第十一章 标准化和软件知识产权
52 0
|
域名解析 存储 安全
让理想中的企业级站点开发走进大众 - ServerlessDevs 1024特别奉献
本篇文章像大家介绍一下,如何使用serverless devs 结合云产品实现一个具备 高安全,高性能,高体验,高容灾,低成本的web站点
214 0
让理想中的企业级站点开发走进大众 - ServerlessDevs 1024特别奉献
|
Java 微服务
最主流的技术体系进阶路线图,带走不谢!!!
毫不夸张的说,Java是现阶段中国互联网公司中,使用最为广泛的编程语言。掌握了Java技术体系,不管你在成熟的大公司,快速发展的风口公司,还是早期创业型公司,都能让你有立足之地。
1842 0
苹果公布无人驾驶项目裁员细节:硬件工程师为主
苹果的自动驾驶计划依然任重而道远。
204 0
国内量子计算新进展,上交大团队成功运行专用算法
这一研究让量子计算的物理实现成为可能。
485 0
|
算法 Oracle 关系型数据库
给大二学生——重视课程为前提,课外学习要随心
【来信】 贺老师:    你好!我是一名普通二本软件工程学生。现在大二下学期,马上要大三了。    客套话我就不说了,直奔主题吧    我是一名农村的孩子,在上大学的时候,就想努力学习,找一份工作(是不是好幼稚?)。所以,大一上期乖乖上课,编写了一些小程序。在大一下学期,无意间看到了一些培训机构的视频:c++,Java,php,Android.......然后就开始学习了,当时就想走开发方向,
1571 1
|
云计算
进入空气稀薄地带,《朗读者》再现阿里云10年技术自主研发
近日,阿里云创始人王坚在央视最新一期《朗读者》中诵读了乔恩·克拉考尔的《进入空气稀薄地带》。在节目中,他回忆说,“现在阿里云的成就是工程师拿命换来的,其实也是最早一批客户拿命在填,就像第一个用电的人一样”,从思想上的雏形到成熟,阿里云走过了5年多。
3506 0