视觉中国:基于容器云的同城双活微服务架构上云实践

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文正在参加阿里云「最佳上云实践」征文大赛(https://yq.aliyun.com/activity/150),欢迎届时给我们投票 视觉中国集团(Visual China Group)创立于2000年6月,是中国领先的视觉影像产品和服务提供商。

本文正在参加“最佳上云实践”评选,来给我们投票吧:https://yq.aliyun.com/activity/158(编号7)

视觉中国集团(Visual China Group)创立于2000年6月,是中国领先的视觉影像产品和服务提供商。视觉中国集团是以“视觉创造价值,视觉服务中国”为愿景的A股唯一互联网文化创意上市公司(股票代号000681,股票简称:视觉中国)。视觉中国集团以“视觉内容与服务”、“视觉社区”和“视觉数字娱乐”三大业务板块为核心,拥有中国最大的视觉内容互联网版权交易平台,同时为国内的主题公园、城市综合体提供领先的数字娱乐整体解决方案。旗下包括华盖创意(Getty Images China)、汉华易美(China Foto Press)、东星娱乐(TungStar)、视觉ME社区(shijueme)、艾特凡斯(Advance)等业界著名品牌。集团拥有近万名签约摄影师和艺术家,并同海内外数百家图片社、影视机构、版权机构广泛合作,为媒体、企业主、广告公司等各类客户提供专业的图片、影视、音乐、特约拍摄、创意众包、视觉化营销等一站式服务。  

选择云平台 

视觉中国集团目前有分布在北京市各区的5个机房,我们的应用分布在这五个机房,数据间调用复杂且低效,运维维护成本高,每年的预算更是给企业带来一定的负担。为了摆脱这种模式我们决定云化,考察了腾讯云,华为云,ucloud等厂商,最后选择了更能切实解决我们问题且更值得信赖的阿里云平台。

我们采用了基于阿里容器云的同城双活微服务架构(consul+template+registrator),这样既能保证服务的高可用,也在CI,CD方面有所作为。使用到的产品有ECS,RDS,OSS,REDIS,消息通知服务,DATAV,QUICKBI,切图服务,RAM,容器云,云盾,SLB等十几种。

迁移上云 

我们首先进行线下实体机房的微服务的搭建及测试,确保服务可用后进行云化的考量。整个应用迁移过程分为几个步骤:

  • 阿里云资源申请。包括ecs,rds及oss等
  • 容器云测试。简单搭建几个docker测试可用性
  • 部署微服务。基于consul+template+registrator进行部署
  • 代码部署。把jar包等通过jkenins进行部署
  • 功能测试。
  • 性能测试。
  • 灰度发布。A/B test
  • 部分应用迁移。
  • 观察期
  • 整体业务上线
  • 观察期
  • 迁移完毕

整体交付完成之后,我们的CI、CD基本上做了实践,研发发布代码无需经过运维干涉,自动发布,自动部署一键完成。 

云端架构解析

ebf2c55b0c3af2fd70e2098328d9721c7bc7264c


架构要点解读:

  1. 容器集群是Region级别的服务,集群内可以包含多个可用区的ECS。
  2. 容器服务支持将同一个服务的容器调度在不同的可用区(zone)里,这是通过编排模板中的availability:az=xx标签来实现,具体参考:https://help.aliyun.com/document_detail/26018.html?spm=5176.doc26086.6.149.VT2kDs
  3. SLB本身具有跨机房高可用特性,使用主、备在不同可用区的SLB类型即可。

整体架构就是基于容器云的同城双活架构,其实我们还有异地灾备。

交付采取镜像的交付方式,gitlab上传代码后通过jenkins进行打包操作,镜像交付到开发环境,功能验证没问题后,gitlab合并代码到test环境镜像交付后进行test环境的功能及性能测试。

最后将镜像推送至生产环境,生产环境采取双consul多数据中心模式,可用区A连接位于A区的consul master,同时将注册信息同步至位于可用区B的consul master,这样保证多区的微服务集群高可用。

两个区共用基础资源,RDS通过DTS同步至测试环境,测试环境和dev环境共用一套RDS。我们的架构在满足持续交付,持续部署的同时也满足了高可用的需求,每个微服务都是集群,这样基于容器层,ECS层,consul层,微服务层,任何节点出现问题对用户都是不可见的,实现了高可用。 

上云前后分析对比

  1. 成本上可以做到有效的控制,随时做到服务的升降级。
  2. 阿里云帮助我们实现了故障主机的实时迁移,保障了业务的可用性,运维也比较省心。
  3. 在安全方面基于云盾和先知等产品的安全防护可以做到多层次的保障,极大提高了我们的服务安全性。
  4. 监控方面也很细致和全面,支持自定云完全满足我们的需求。成本方面可以随时关注费用中心,自行进行分析。
  5. 效率方面,因为是基于容器云的微服务架构,这方面也有非常大的改善。

以上几点任何一点在传统机房的模式下想做到全面和高效都是比较困难的,这也是我们为何进行云化的原因。 

上云遇到的问题及解决方法

遇到的问题还是比较多的,我列举几个典型的问题。

  1. 中美oss同步大文件有数据重传问题及日常传输方案。稳定性建议采取高速通道,日常传输采用multipart分块实现
  2. 云端支持批量上传数据的压缩及打包下载解压缩功能。通过udf实现
  3. oss子账户授权后只能看到自己目录内容。通过ossfs实现
  4. 跨境oss数据接收后无法确实该删除的文件。通过跨境消息通知机制实现
  5. 跟进不同的图片主题进行切图参数的相关匹配。通过智能识图完成
  6. 数据大屏展示。通过datav和quickbi实现
  7. ddos攻击防护。通过高防ip及waf防火墙实现
  8. 容器云日志采集和查看。通过sls实现

 

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。
|
4天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。
|
1天前
|
监控 API 持续交付
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第23天】 随着现代软件开发实践的不断演进,微服务架构已经成为企业追求敏捷、可扩展和弹性解决方案的首选。本文深入探讨了如何构建一个高效的微服务架构,涵盖了关键的设计原则、技术选型以及实践建议。通过分析微服务的独立性、分布式特性和容错机制,我们将揭示如何利用容器化、服务网格和API网关等技术手段,来优化后端系统的可维护性和性能。文章旨在为后端开发人员提供一套全面的指南,以应对不断变化的业务需求和技术挑战。
|
6天前
|
机器学习/深度学习 运维 Prometheus
探索微服务架构下的系统监控策略
【4月更文挑战第18天】在当今快速迭代和持续部署盛行的软件工程实践中,微服务架构因其灵活性和可扩展性受到企业青睐。然而,随着服务的细粒度拆分和网络通信的增加,传统的监控手段已不再适用。本文将探讨在微服务环境中实施有效系统监控的策略,包括日志聚合、性能指标收集、分布式追踪以及异常检测等关键技术实践,旨在为读者提供构建稳定、可靠且易于维护的微服务系统的参考指南。
12 0
|
6天前
|
监控 持续交付 开发者
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第18天】在数字化转型的浪潮中,微服务架构已成为企业提升系统灵活性、加速产品迭代的关键。此文深入探讨了构建高效微服务架构的实践方法,包括服务划分原则、容器化部署、持续集成/持续部署(CI/CD)流程以及监控与日志管理等关键技术点。通过分析具体案例,揭示了微服务在提高开发效率、降低维护成本及促进团队协作方面的显著优势。
|
7天前
|
消息中间件 运维 监控
现代化软件开发中的微服务架构设计与实践
本文将深入探讨现代化软件开发中微服务架构的设计原则和实践经验。通过分析微服务架构的优势、挑战以及常见的设计模式,结合实际案例,帮助开发者更好地理解如何构建可靠、可扩展、高效的微服务系统。
|
7天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
8天前
|
敏捷开发 监控 前端开发
深入理解自动化测试框架Selenium的架构与实践
【4月更文挑战第16天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加快迭代速度的关键手段。Selenium作为一种广泛使用的自动化测试工具,其开源、跨平台的特性使得它成为业界的首选之一。本文旨在剖析Selenium的核心架构,并结合实际案例探讨其在复杂Web应用测试中的高效实践方法。通过详细解读Selenium组件间的交互机制以及如何优化测试脚本,我们希望为读者提供深入理解Selenium并有效运用于日常测试工作的参考。
14 1
|
9天前
|
监控 JavaScript 安全
构建微服务架构下的API网关
【4月更文挑战第15天】在微服务架构中,API网关扮演着至关重要的角色。它作为系统的唯一入口,不仅负责请求的路由、负载均衡和认证授权,还涉及到监控、日志记录和服务熔断等关键功能。本文将探讨如何构建一个高效且可靠的API网关,涵盖其设计原则、核心组件以及实现策略,旨在为后端开发人员提供一套实用的指导方案。
22 4
|
10天前
|
监控 负载均衡 API
构建高性能微服务架构:后端开发的最佳实践
【4月更文挑战第14天】 在当今快速发展的软件开发领域,微服务架构已成为构建可扩展、灵活且容错的系统的首选方法。本文深入探讨了后端开发人员在设计和维护高性能微服务时需要遵循的一系列最佳实践。我们将从服务划分原则、容器化部署、API网关使用、负载均衡、服务监控与故障恢复等方面展开讨论,并结合实际案例分析如何优化微服务性能及可靠性。通过本文的阅读,读者将获得实施高效微服务架构的实用知识与策略。