
Docker 容器具有快速部署、易于扩展的特点,非常适合用于支持高流量网站。通过 Docker 的负载均衡功能,可以轻松地将网站应用部署在多个容器实例上,实现水平扩展以处理海量的访问请求。Docker 容器的轻量级特性也大大提高资源利用率,降低扩展成本。Docker 容器的声明式配置还能够实现快速的自动化部署和扩容,提高系统的可靠性和可维护性。
除水平扩展,Docker 容器也非常适合用于托管网站应用。Docker 容器提供一个标准化的运行环境,能够很好地解决各种依赖问题,确保应用在任何环境下都能稳定运行。Docker 容器的隔离性也能够有效地防止不同网站应用之间的相互影响,提高系统的安全性。Docker 容器的灵活性和便捷性也大大简化网站应用的部署和管理过程。
从虚机到容器,知名架构师告诉你如何平滑进行业务迁移
【小宅按】近期,短视频产品“秒拍”完成了一个“大动作”——将原来部署在虚拟机上的主体业务迁移到华为云,同时将公司的技术体系承载在下一代虚拟技术容器(Docker)上。 而这一系列动作是在业务不下线,用户无感知的前提下完成的,秒拍是如何做到的?在处理海量数据方面,容器服务拥有天然优势,包括启动快速、占用资源少、运行效率高等技术特点。 然而,如何保证业务能够快速无缝地进行切换,让用户毫无感知地完成从虚机到容器的迁移,这并非易事。 秒拍选择了华为云,凭借其强大的技术支持能力和服务团队,为这次迁移解决了后顾之忧。 以下是秒拍架构师李东辉对本次业务迁移的记录,如果你也希望从虚机向更灵活的容器升级,又不希望影响业务,不妨一看:背景主体业务已部署在云上,但技术体系基于传统虚拟机。 秒拍产品具有媒体属性,经常遇到突发流量,对服务端的考验较高。 同时,云平台存在单点依赖风险。 经过综合考量,决定将主体业务迁移到华为云,并优化架构,以更好地支撑海量用户访问。 前端机从VM过渡到docker。 迁移过程1. mc迁移:mc主要做临时缓存,忽略缓存miss时从存储拉取的数据。 mc集群从服务端集群到客户端集群,需要更新MC连接时添加服务器列表及权重。 2. mq迁移:mq用于解耦业务模块,生产端生产数据,消费端多个实例。 配置好资源的vhost、exchange和queue,服务端先更新配置上线,数据写入新资源,消费端切换到新资源消费。 3. redis迁移:分为缓存数据和持久化数据两部分。 缓存数据可通过忽略策略,持久化数据采用RDB快照迁移或业务改造方案。 RDB快照迁移操作简单快速但不支持增量同步;业务改造方案兼顾存量与增量数据,但非原子性操作存在并发误差。 4. db迁移:全量数据预复制,增量数据通过binlog同步。 注意主从同步延迟问题,主从间1ms延迟可能导致“更新后读取脏数据”现象。 5. ES迁移:主要服务APP和后台搜索需求。 存量数据从DB拉取,增量数据通过监听DB更新同步到ES。 6. 版本库迁移:更新资源链接地址、用户名、密码等配置。 7. 服务发现:从基于服务端发现转为k8s调度,LB下层为Pod,VM提供不同规格物理资源。 8. Dokerfile制作:基础镜像包含PHP、nginx环境和用户权限,实现项目代码复制至容器。 9. 切流量:非核心业务修改DNS解析至新LB IP,核心业务高防源站IP修改至新LB。 10. 部署上线:构建镜像,使用k8s滚动升级,先kill老镜像,再派生新镜像。 架构优化针对业务问题,确定优化点:mc、redis优化、核心业务降级策略、负载均衡策略、Mysql HA、日志与监控。 优化目标包括提升性能、增强高可用性和监控能力。
构建应用程序并实现可扩展性
目前提供了许多无代码解决方案。但它们是如何工作的?你能否构建应用程序,使其覆盖数千甚至数百万人,并提供良好的体验和价值?所有这些都不是开发人员吗?
这些是我们与BackEndounced首席执行官马克·皮勒(MarkPiller)讨论的一些话题。看看下面的采访!
请向我们的观众演示这个问题最简单的答案是:BackEndound是一个可视化应用程序开发平台,专为任何想要构建移动或网络的人设计。
这是一个可以将应用程序的想法变成现实的地方。 您可以通过创建一个完整的web或移动应用程序来实现这一点,平台本身为您提供了创建构成任何应用程序的两个主要部分所需的所有元素——前端和后端。
前端基本上是终端用户在设备或计算机屏幕上看到的任何东西,以及他们与之交互的东西。 因此,Backfundle提供了一个完整的系统,您可以在其中创建前端,它可以是构成web应用程序的一组页面,相互链接,一组用于移动应用程序的屏幕。
通过将构成UI的所有元素拖放到代表前端的画布上来实现。 您可以在应用程序中添加所有需要的逻辑,而无需任何编码——这是一种我们称之为“无代码”的方法,一种图形编程范式。
第二部分是后端,对于更广泛的开发者群体来说,后端可能更复杂。 通常,它是数据库所在的位置、用户存储的位置以及文件所在的位置。 它具有负责任何类型的数据转换、处理或分析的业务逻辑;这就是安全规则所在的地方,你可以从那里发送推送通知和电子邮件。
backfundle可能是后端功能最丰富的系统,提供了后端所需的几乎每一个元素。 从这个角度来看,BackEndounced的不同之处在于,一切都是视觉的。 你不需要成为开发人员或数据科学家,只需要完全通过浏览器建模和操作后端,浏览器是进入我们平台的窗口。
最重要的是,后端和前端之间的集成水平是无与伦比的。 如果你需要在数据库中保存一些东西,它实际上只是一个单独的数字块,负责这些。 如果您需要登录用户或发送电子邮件,或发送推送通知,所有这些可以从前端驱动的任务都可以通过一个简单的可视化博客来完成,该博客代表了该功能。
贵公司与其他应用开发者平台的主要区别是什么?这是功能的部分吗这取决于你是在与后端开发人员交谈,还是与编写Android、iOS或JavaScript的编码人员交谈,并且需要一个后端系统。 如果你说的是一个非程序员,他想在不了解特定编程语言的情况下构建一个应用程序,那将是另一种情况。
然而,我们的共同点是,当我们开始在平台上工作时,我们的愿景是构建一个端到端的完整系统,您可以在其中构建整个应用程序。 然而,与同类领域的许多其他公司不同,我们从后端开始。 在很长一段时间里,我们的观众只是程序员,他们创建UI,并将BackEnd集成为一个通用的后端,而没有任何前端功能。
我们之所以有这样的愿景,是因为在应用程序领域,许多公司经常忽略的最重要的事情之一是可伸缩性。 这很难实现。
创建在数据库中保存内容的功能并不难。 但是,很难创造出能够处理数据库集成的技术,也很难以一种不会随着数据库和用户群的不断增长而减慢集成速度的方式来实现。 例如,如果你启动一个应用程序,一个人在使用它,一切都很快。 然后,你有成千上万的用户,数万的用户,数百万的用户??如果系统不能按比例构建,它将开始减速,最终崩溃。 如果可伸缩性是事后考虑的,或者没有考虑到,并且服务器崩溃,那么应用程序的价值将变成绝对零,不管用户界面有多漂亮,不管你在设计师或图形上花了多少钱。
事实上,情况会更糟,因为人们会在应用商店里对你的应用程序留下负面评论。 我们设定了一项任务,将可伸缩性作为一项服务来提供:无论你是否是一名普通的开发人员,无论你是否是一名编码人员,每当你使用BackEndound进行构建时,我们都保证,如果你的应用程序达到拥有数百万用户的程度,它将以完全相同的方式工作,速度也一样快。
我们花了相当多的时间来设计真正可以无限扩展的系统。 我们花了一些时间,因为问题非常复杂,我们有信心BackEndound可以扩展。
BackLendes的技术堆栈可以安装在Docker和Kubernetes运行的任何地方,这使我们能够为特定客户创建额外的后端列表安装。 这些客户包括银行、医疗保健和公共教育部门,它们的应用程序类型非常密集,给系统带来了巨大的负载。 你认为谁是你的主要客户群
BackEndound作为一个技术堆栈可通过三种不同的产品获得。 所以,这是同一种技术,以三种不同的方式打包,其中一种叫做无止境云。
这是我们在欧洲和北美维护的集群安装,我们将向亚洲扩张。 您只需注册并开始构建,无需安装任何设备,而且价格合理。 独立开发者、小公司、中小型企业、高流量、数以万计的注册开发者正在使用该系统进行建设。
现在,同样的技术栈也可以安装在Kubernetes运行的几乎任何地方。 它真的是无限的。 这吸引了一些更大的组织。 事实上,我们有几家财富1000强公司作为我们的客户。 第三个,它是另外两个的混合体。
对于一个想要一个应用程序但不知道如何启动的小企业主,你有什么建议构建应用程序肯定有一个过程。 对于一个不懂技术、只对应用有想法的人来说,很难按照我的建议去做。
第一步是开始绘制用户体验。 你可以把它写在纸上,但如果你搜索模拟系统或故事板,我喜欢使用的系统叫做Balsamiq。 它不需要漂亮,事实上它不会漂亮,但它将创建用户体验的框架。
一旦你做到了这一点,接下来的步骤就变得非常容易了。 你可以聘请一位图形设计师来看看那些草图和实物模型,我们将为其创建一个更漂亮的版本。 然后我们会考虑所有的用户体验。
下一步是提出您的数据模型,并了解应用程序处理的数据将如何在数据库中用backuncious表示,还有一个可视化建模器,允许您设计数据库。
在那之后,你开始计划如何,为什么我们将与后端通信。 现在,您已经了解了UI的外观,以及驻留在服务器上的数据的外观,可以开始将这些点连接在一起了。
未来的计划是什么首先,我们继续添加新功能,以使其更普遍地适用于不同的业务案例。 我们正在增强我们的数据库,并提供新的启动方式。 我们正在提供与其他系统的集成。 自动化非常重要。 在这个过程中,您可以创建某种控制器,某种将同一应用程序的不同部分集成在一起的系统。 随着现代世界的应用程序变得越来越复杂,您将为不同类型的用户提供专门的应用程序。
如果你想到优步,有一款乘客应用。 有一个司机应用。 有一个客户服务应用。 这些应用程序需要协调在一起。 我们认为,对我们来说,重要的是提供一种协调这些因素的方式。 因此,我们正在研究的一件事是针对更复杂的应用程序,创建一个能够协调业务流程的系统。
Docker(六):Docker 三剑客之 Docker Swarm
在实践中,企业往往需要部署多个Docker节点来满足生产环境的需求。 搭建Docker集群已成必要。 然而,在众多容器集群系统中,如何选择合适的工具呢?答案是Swarm。 Swarm是Docker原生的集群管理工具,以其简单性、易于学习和节省资源的特点,尤其适合中小型企业使用。 Swarm作为Docker社区的唯一原生集群管理工具,可以将多台Docker主机整合为单一的虚拟Docker主机,从而实现跨主机子网网络。 它提供集群管理和调度能力,帮助IT团队整合集群中的所有Docker Engine,通过单一主Swarm与集群进行沟通,而无需分别与每个Docker Engine进行交互。 借助灵活的调度策略,IT团队可以更高效地管理资源,确保应用容器运行顺畅。 Swarm具有高性能表现,可扩展性强。 无论是5台还是上千台服务器的集群,都能在其环境下高效运行。 经过测试,Swarm在1000个节点上可管理个部署容器,每个容器启动时间亚秒级,性能无损。 Swarm内置的调度器支持多种过滤器,包括节点标签、亲和性以及多种容器部署策略,实现资源优化利用。 Swarm提供高可用性,通过多个Swarm master节点和故障恢复策略确保服务连续可用。 如果一个master节点故障,另一个slave节点将被提升为master,直至故障节点恢复。 此外,Swarm能够处理节点故障,尝试重新调度容器,并提供错误警报和日志记录。 Swarm还与Docker API和整合支持兼容,确保与不同Docker工具无缝对接,包括Docker CLI、Compose、Trusted Registry、Hub和UCP。 Swarm原生支持Docker化应用的核心功能,如多主机网络和存储卷管理。 通过Compose文件,可以轻松地将服务部署到测试服务器或Swarm集群。 Swarm还能从Docker Trusted Registry或Hub拉取并运行镜像。 总之,Swarm提供了一套高效、稳定和兼容的Docker集群管理解决方案,方便调度集群中的Docker容器,合理利用集群主机资源。 然而,并非所有服务都适合部署在Swarm集群内,例如数据库和有状态服务。 在Swarm集群中,每个运行Docker的主机都成为Swarm集群的节点。 节点分为管理节点和工作节点。 管理节点用于集群管理,执行docker swarm命令(除节点退出集群命令docker swarm leave外),而工作节点负责任务执行。 管理节点默认也是工作节点,可以通过配置让服务只运行在管理节点上。 服务在Swarm中分为两种模式,通过docker service create命令中的–mode参数指定。 服务是任务的集合,每个服务定义了任务的属性。 通过docker service命令管理集群中的服务。 创建Swarm集群,首先初始化管理节点,随后添加工作节点。 使用docker swarm init命令初始化集群,并通过Docker Machine创建虚拟主机作为工作节点。 使用docker node ls命令查看集群节点信息,集群包含一个管理节点和两个工作节点。 部署服务时,使用docker service命令管理集群。 创建服务,使用docker service ps命令查看服务进度,docker service ls命令查看当前集群运行的服务。 监控集群状态,通过docker service inspect命令查询服务概要和详细信息,docker service ps命令查看服务在哪个节点运行。 Swarm的弹性伸缩功能强大,允许动态调整服务实例个数。 增加或减少服务实例,查看服务在哪个节点运行。 通过动态调整Swarm集群的工作节点,实现集群大小的调整。 实验显示,Swarm集群可以高效地执行实例上线操作,实现自动化水平扩展,节省资源,避免业务流量波动导致的服务性能下降。 通过对Swarm的学习,企业可以充分感受到自动化水平扩展带来的便利性。 在流量爆发时,只需执行一个命令即可完成实例上线,同时利用自动化控制实现动态伸缩。 这不仅节省了公司资源,还能有效避免业务流量冲击导致的服务性能问题。 Docker凭借容器化技术,为DevOps带来了重要转变,未来容器化技术将更加丰富和完善,智能化运维值得期待。