本文向正在对将两层 Web 应用程序迁移到云端进行内部评估的组织介绍 Google Cloud 选项 ## 应用类型 两层 Web 应用程序由运行应用程序的 Web 服务器和存储应用程序数据的数据库组成。运行 Linux、Apache、MySQL 和 PHP,通常称为 LAMP 堆栈,是两层 Web 应用程序的常见示例。 Linux 发行版、Web 服务器软件、数据库或编程语言的变化会影响任何迁移的技术细节,但迁移概述和步骤是一致的 ## 迁移阶段 云迁移发生在以下四个阶段 评估 确定您的工作负载的所有特征,列出在云中运行您的工作负载所需的资源,并调出所有关键依赖项和与其他工作负载的连接。使用完整的特征列表,您可以开始计划应移动哪些应用程序和工作负载,以及移动顺序 在现代企业中,有许多不同类型的应用程序,从面向客户的应用程序到后台应用程序,再到开发人员工具,再到实验性应用程序。同时以相同的方式移动所有这些应用程序是有风险且效率低下的 一个例子是将应用程序分为以下三大类: - 易于移动的应用程序。它们具有更少的依赖性,更新,内部编写,因此没有许可考虑,并且更容忍扩展和支持云设计模式 - 难以移动的应用程序。它们具有更多的依赖性,对扩展的容忍度较低,难以与云服务一起运行,或者具有复杂的许可要求 - 无法移动的应用程序。一些可能不适合迁移的应用程序在专用或旧硬件上运行,具有业务或法规要求,使得它们必须留在您的数据中心,或者具有复杂的许可要求,不不允许他们迁移到云端 这些只是对应用程序进行排序的方法的一些示例。您的应用程序可能有更多决定因素,您可以使用这些因素来创建所有应用程序的优先级矩阵。从该排名中,您可以选择要移动的第一个应用程序,并开始规划您的 Google Cloud 基础 基础 架构师和规划具体细节以部署新的云环境。这些包括: - 为您的工作负载提供基础设施基础的云架构和安全模型 允许应用程序之间安全可靠通信的网络资源。这需要对身份和访问管理 (IAM)、虚拟私有云 (VPC) 设计和外部访问方法进行广泛规划 您的工作负载将运行的最终状态技术和工具 考虑依赖性管理、时间表和移动数据的方法 移民 移动数据并将服务、基础架构和代码部署到您的目的地。您应该使用自动化和工具来支持这些操作 优化 验证您在评估和基础阶段做出的决定和假设是否与迁移阶段后的现实相符。您确定可能需要的任何更改。考虑如何探索其他云原生选项,例如从基础架构即服务 (IaaS) 迁移到平台即服务 (PaaS),或利用托管服务产品。根据优化阶段的结果,您可能会再次开始循环以解决更改或修改。始终从评估阶段开始,并利用您的经验在每次迭代中提高效率 ## 迁移类型 以下各节介绍了将应用程序移至云端的三种最常见的迁移策略 提升和移动 使用 *提升和转移*当你想移动应用程序时改变为 尽可能少地了解它们的功能。这最适合应用程序 可以在云中不加修改地运行,当快速移动应用程序时 优先级,或者当业务没有兴趣或需要改变时。这 迁移需要基础设施和运营人员的更多工作 支持服务运行位置的基础性变化,减少工作量 来自开发人员,因为很少(如果有的话)代码需要更改 例如,如果您的 Web 应用程序的两层都托管在 VM 上,您可以使用迁移到虚拟机按原样迁移它们。当这些虚拟机在云端时,您可以考虑升级到更多的云原生计算平台以获得更多好处 改进和移动 使用 *改进和移动*当你想现代化你的应用程序时 迁移到云端的过程。这个一般在申请的时候用到 在云中不支持原样,或者在软件或软件进行重大更新时 硬件已经确定范围和计划。这种迁移需要基础设施, 运营,和开发者共同努力,完善功能 云中的应用程序,并允许应用程序利用 云原生的好处,例如更多的可移植性、可扩展性和可靠性 该策略的另一种变体是改进和移动一个动作。如果您的 Web 应用程序的两层都托管在 VM 上,您可以使用 Migrate to Containers 自动移动这些 VM 并将其转换为在 Google Kubernetes Engine (GKE) 上运行的容器 拆换 使用 当您想在云中构建新解决方案时*推倒重来*,以及 停用本地解决方案的当前版本。这是常用的 当以下条件适用时: - 现有应用程序在技术上或财务上不值得在云中维护 - 许可云中的软件是禁止的或不切实际的 - 应用程序完全无法满足业务需求 因为推倒重来需要从头开始重写应用程序,所以本迁移指南不涉及 ## 评估阶段 在开始任何迁移之前,您必须彻底了解您的起点 任何未解决的问题都会对迁移的成功构成风险。在评估阶段花费时间有助于确保迁移阶段顺利进行。花尽可能多的时间来获取尽可能多的相关信息以支持您的迁移 应用软件堆栈 与您的基础架构、运营和开发团队合作,确定以下详细信息: - 操作系统:准确的分发、版本、补丁、已安装的包 - 网络服务器:确切的软件包、版本号、软件包或其他软件修改,以及网络服务器软件的所有配置文件和规则 - 数据库:准确的软件名称、版本、架构、复制策略和备份计划 - 运行时环境:所有后端和前端环境的精确版本 系统硬件资源 对于 Web 服务器和数据库层,请回答以下问题: - 现在有多少台服务器在运行? - CPU 的总分配是多少,包括世代、架构类型和速度? - 分配给每台服务器的 RAM 和磁盘空间是多少?是否正在使用 HDD 或 SSD?袭击? - CPU、RAM 和磁盘空间的当前利用率、平均利用率和峰值利用率是多少?在您的特定业务用途的背景下查看您的平均值和峰值。例如,支持奥运会的公司可能需要回顾两年才能看到真正的峰值是什么样子,而其他应用程序可能具有更稳定的运行率。看最典型的用例时间线为平均值,看你最重的使用时间线为峰值。还要寻找周期性使用模式,例如周末、晚上和工作日- 对于数据库,正在使用什么备份、复制或分片策略,以及如何使用影响磁盘空间要求和所需服务器的数量?网络资源分析允许您的应用程序运行的网络架构。确保您拥有支持您的应用程序的基础架构的准确且最新的逻辑和物理网络拓扑图。图表必须清楚地概述所有连接、依赖关系和网络服务回答以下问题:- 客户如何访问您的应用程序?通过网络浏览器?直接通过 IP 地址?通过移动应用程序?使用虚拟专用网络连接?- 您是否有所有适用的 SSL/TLS 证书和加密密钥的列表?- 所有适用的 SSL/TLS 证书都托管在哪里?它们什么时候过期?如何更新证书?如何获取新证书?您是否有权访问所有当前证书?- 您是否有支持该应用程序的所有适用域的列表?- 这些域托管在哪里?它们什么时候过期?你如何更新它们?您是否有权访问控制注册的帐户?- 您的 DNS 托管和控制在哪里?- 您是否有权访问控制 DNS 的所有系统和工具?每个域当前的 CNAME 到 IP 映射是什么,您有备份吗?- 您的 DNS 生存时间 (TTL) 设置是多少?- 您的防火墙和其他网络访问和控制设备在架构中的位置如何?现在制定了哪些规则来允许或拒绝流量?谁负责,更改或更新这些规则的程序是什么?- 您使用任何外部网络服务吗?例如,内容分发网络(CDN)提供商,或分布式拒绝服务(DDoS)保护服务?## 基础阶段谷歌云为 LAMP 等多层应用程序运行计算和数据库工作负载提供了许多选项。本节介绍了这些选项,并解释了为什么您可能会选择一个而不是另一个以计算为中心的选项Compute EngineCompute Engine 是一种 IaaS允许您在 Google Cloud 上运行虚拟机 (VM) 的产品。您可以安装网络框架、服务器软件、数据库和您的操作系统支持的任何其他软件。如果您在裸机、虚拟机、数据中心或其他云提供商上运行自己的 LAMP 应用程序,则此选项可以紧密(如果不是完全)复制您现有的服务器。此选项提供对操作系统配置和 Web 服务器软件设置的最大控制。Compute Engine 允许深入控制机器类型、实例组、存储选项、负载均衡器和许多其他细节。请参阅完整的 Compute Engine 文档以获取更多快速入门、教程等将您的应用程序直接迁移到 Compute Engine 是最常见的直接迁移。有关将本地资源映射到 Compute Engine 的指南,请参阅将虚拟机迁移到 Compute Engine 的最佳实践Cloud Deployment ManagerGoogle Cloud Marketplace 也通过 Deployment Manager 提供简单的 LAMP 安装。您可以在默认设置中安装并配置 Debian Linux、Apache、MySQL、PHP 和 phpMyAdmin 来启动服务器。您将在短短几分钟内获得一个功能齐全的 Web 服务器和用于 MySQL 安装的凭据Google Kubernetes EngineGKE 是一个托管的、生产就绪的环境用于部署容器化应用程序。使用 GKE,您可以通过容器化 Web 服务器软件来停止管理操作系统。例如,每个公共容器存储库都提供 Apache 和 NGINX Web 服务器。如果您使用容器在您的环境中运行工作负载,GKE 是一种高效的服务,可以在您将 LAMP 工作负载迁移到 Google Cloud 时维护类似的部署和测试工作流。如果你不使用容器,可以考虑探索GKE,以获得更快的部署和恢复,更高的资源使用效率,并且不必管理底层操作系统和VM对于有关大规模容器应用程序管理的更多信息,请参阅 GKE 文档以获取快速入门、教程、概念、操作指南和其他资源,以帮助您入门移动您的本地 LAMP 应用程序到 GKE 是一种改进和移动迁移,而从自我管理的基于容器的基础设施迁移是一种直接迁移App EngineApp Engine is用于构建高度可扩展应用程序的无服务器平台。根据您运行的应用程序类型,App Engine 可以消除管理服务器、容器或部署的需要,让您的开发人员能够专注于编写代码并降低管理任何底层基础设施的复杂性。并非所有工作负载都适合迁移到 App Engine,但那些看到成本和复杂性降低同时提高扩展速度和负载下应用程序弹性的工作负载App Engine 有两种类型:标准环境涵盖多种语言(包括用于我们的 LAMP 应用程序的 PHP),灵活的环境允许对运行时、性能和基础架构进行更多自定义。浏览您选择的语言的文档以了解更多信息数据库选项 在 Compute Engine 上自行管理 您可以在 Compute Engine 实例上安装 MySQL、PostgreSQL 或任何其他基于 SQL 的数据库。这提供了与在工作站、数据中心的服务器或其他云提供商的 VM 上运行 MySQL 时相同级别的控制。当您在 VM 上运行数据库时,您有责任配置、监控和维护故障转移、复制、分区和高可用性 您可以将数据库视为计算工作负载,考虑 CPU、RAM 和磁盘空间以确保有足够的资源让应用程序可靠地运行 就像将计算工作负载转移到 Compute Engine 一样,这种方法代表了直接迁移 云端SQL Cloud SQL 是一种完全托管的数据库服务,可将数据库的安装、设置和维护工作卸载到 Google Cloud。它自动执行备份、复制、补丁和更新,让您专注于您的应用程序。 Cloud SQL 数据库可供在 Google 的任何计算服务(包括 Compute Engine、GKE 和 App Engine)上运行的工作负载使用。除非您需要对 MySQL 数据库进行深入控制,否则 Cloud SQL 是运行 LAMP 工作负载的易于设置且功能齐全的选项 Cloud SQL 可以原生运行并支持 MySQL 和 PostgreSQL。如果您要从其中一个数据库迁移到 Cloud SQL,这就是直接迁移。如果您正在探索新的复制方法、备份策略或简化管理基础设施的方法,这可能是一种改进和移动迁移 其他存储选项 Cloud Storage 是一种可扩展、完全托管、高度可靠且经济高效的对象或 blob 存储,非常适合存储图像、静态资产和其他非结构化数据。 Cloud Storage 可用于托管静态网站,但并非旨在存储活动数据库内容。它也是存储备份和灾难恢复对象以及用于流式传输的数据的理想位置 考虑在迁移期间和之后使用 Cloud Storage 作为存储数据库备份的位置 Firestore Firestore 是一个完全托管的无服务器云原生 NoSQL 文档数据库,可在全球范围内简化移动、Web 和物联网 (IoT) 应用程序的数据存储、同步和查询。其客户端库提供实时同步和离线支持,而其安全功能以及与 Firebase 和 Google Cloud 的集成可加速构建真正的无服务器应用程序。如果您的应用程序包含可以受益于 NoSQL 格式的内容,例如用户配置文件、产品目录或游戏状态,您应该在迁移的优化阶段探索 Firestore 火力地堡 Firebase 是一个综合的移动开发平台,包括存储和数据库选项。如果您的应用程序支持移动工作负载,则应在优化阶段考虑 Firebase 平台 云扳手 Spanner 是为云构建的企业级、全球分布式且高度一致的数据库服务。它结合了关系数据库结构的优点和非关系数据库的水平可伸缩性。如果您的应用程序可以受益于增强的可管理性、可扩展性和具有强一致性的事务,请考虑在优化阶段将数据库迁移到 Spanner Google Cloud 提供许多其他存储选项来支持各种工作负载 ## 迁移阶段 完成评估并规划迁移后,您可以开始将数据、服务和资源迁移到 Google Cloud 的工作。每个应用程序都有自己的需求。本节通过一些示例来帮助演示此阶段涉及的内容 提升和转移:Compute Engine 开始直接迁移的第一步是在 Compute Engine 中建立兼容的多层服务。虽然有很多方法可以解决这个问题;以下是最常见的三种: - 手动设置。启动带有所需操作系统的虚拟机,然后手动更新存储库、安装和配置软件,并手动供应和配置数据库和运行时环境。这种方法提供了高水平的控制,但与其他方法相比需要更多时间、更容易出错并且可重现性更差 - 自动化。使用 Migrate to VMs 将一堆 VM(按指定顺序)从本地迁移到 Compute Engine 中大小合适、自动配置和配置的 VM - 云市场。在您的 Google Cloud 项目中启动预配置的 LAMP 堆栈。请务必检查提供的操作系统和软件版本是否适用于您的应用程序。浏览 Cloud Marketplace 文档以了解更多信息 - 自动部署。使用持续集成/持续部署概念和各种配置管理工具(Chef、Puppet、Ansible、Salt)、基础架构即代码工具(Deployment Manager、Terraform)和自动化框架(Cloud Build)创建生产就绪 VM。自动化部署允许采用可测试、可重复和自动化的方法来部署满足您的应用程序和治理需求的 VM 和软件 改进和迁移:GKE 和 Cloud SQL要迁移到托管容器解决方案,您必须首先为集群和托管 SQL 解决方案奠定基础启动 GKE 集群在 GKE 上创建集群并管理该集群是第一步。使用来自评估和基础阶段的信息来适当调整和配置初始集群,并应用安全强化最佳实践Cloud SQL 的启动选项使用在您的评估和基础阶段获得的数据库信息,创建一个新的 Cloud SQL 实例,并按照其他操作指南为您的应用程序构建数据库。Google 提供了 Cloud SQL 最佳实践列表、高可用性设置指南以及其他水平扩展教程。探索从 Google Kubernetes Engine 连接到 Cloud SQL 的选项,并选择对您的应用程序和经验水平有意义的选项Serverless 改进和迁移:App Engine 和 Cloud SQL如果您决定将 LAMP 应用程序迁移到无服务器框架,您可能需要修改您的应用程序以支持 App Engine。每个应用都不一样,策略也很多。首先回顾以下内容:- 了解 App Engine 上的微服务架构- 了解如何创建和命名 dev、test、QA、staging以及 App Engine 中微服务的生产环境- 学习设计 API 以在微服务之间进行通信的最佳实践- 学习微服务性能的最佳实践根据您的组织和个人经验以及对运行无服务器代码的熟悉程度,无服务器改进和移动策略可能比直接迁移选项花费更多的时间。然而,为您带来最好的无服务器可能对您的组织来说是一笔巨大的财富## 优化阶段在您的应用程序在 Google Cloud 上运行后,您可以验证前三个阶段的假设和决定。完全迁移可能需要很长时间,并且许多细节可能会在整个过程中发生变化。优化涵盖许多领域,但这里有一些常见的类别成本优化从本地迁移到云端改变了您在应用程序上的花费方式、服务和基础设施。您可能会完成对遗留本地服务的评估,并在迁移后发现现代硬件、更快的内存和更新的 CPU 架构可以更高效地运行它。这可能意味着您的 VM 被过度配置并浪费资金您可能会研究在 Compute Engine 上使用抢占式 VM 实例。也许您不需要像您想象的那么多的负载平衡器,或者您设法在迁移过程中清理了您的数据库,现在有您不使用的空间。寻找在云中节省资金和降低运营成本的方法可以成为一项物有所值的全职工作。Google Cloud 有许多成本管理工具可以帮助您了解云定价自动化在云中正确地自动化您的计算工作负载会导致成本节省和提高效率的好处Deployment Manager是一种谷歌云产品,旨在帮助您使用简单的模板创建和管理云资源如果您更喜欢编写自己的自动化程序,则可以使用gcloud编写脚本。虽然财务收益来自自动化,但其他优势包括:- 标准和可重复的流程以降低错误率- 可审计跟踪合规性和治理- 增加对应用程序工作方式、中断方式以及修复方式的理解自动化通过减少对警报和人类反应时间的依赖来增加正常运行时间,通过记录工作流程减少技术债务,并让您的工程师更少地关注保持正常运行,更多地关注构建更好的产品、工具和服务。这些概念是站点可靠性工程 (SRE) 的核心。Google Cloud 提供了一本关于站点可靠性工程的免费在线书籍,以及提供实际示例和案例研究的 SRE 工作簿解耦您的基础设施和代码随着应用程序的增长,您会多次解耦服务。拆分连接的服务,并了解如何独立扩展它们,可以提高应用程序的可用性和可靠性。此过程通常分为三个步骤:- 在任何地方实施基础架构即代码 (IaC)。通过实施 IaC 和配置管理流程,您可以获得可跟踪、可审计和可重现的构建块,用于供应和配置您的整个基础架构- 将您现有的服务解耦为微服务。使用面向消息的中间件,如 Pub/Sub,允许每个微服务成为其自己的故障域- 开始将服务从基础设施即服务迁移到平台即服务,甚至作为服务或无服务器作为服务运行。从“整体代码和基础设施”到“在 IaaS 范围内高效运行的解耦微服务”的旅程是一个有价值的目标,需要时间、努力和奉献精神性能调优性能调整可以显着提高系统利用率和响应时间。每个工作负载都有不同的性能调整方法,从软件配置文件到调整内核标志。对于 LAMP 应用程序,性能调整通常分为三类:- 调整云、网络和操作系统: - 提高谷歌云网络性能的 5 个步骤可以帮助您了解如何充分利用谷歌云网络 - 如果您有特定的 TCP 延迟要求,Google Cloud 中针对网络性能的 TCP 优化会有所帮助 - 优化永久性磁盘和本地 SSD 性能可以帮助您了解 IOPS 繁重工作负载的架构 - 提高 Compute Engine 的性能可以在与其他 Google Cloud API 和服务交互时帮助提高 API 应用程序性能 - 调整网络服务器: - Apache Performance Tuning 和 NGINX Performance Tuning,或者在 Google 上搜索“your web server performance tuning”将引导您朝着正确的方向前进 调优数据库: ## 下一步是什么 - 在 Compute Engine 上设置 LAMP - 部署 LAMP 堆栈 - 详细了解如何在 Compute Engine 或 GKE 上运行计算工作负载 将 GKE 连接到 Cloud SQL 探索迁移到 VM 和迁移到容器 使用 App Engine 在完全托管的无服务器平台上构建高度可扩展的应用程序 详细了解 Google Cloud 上的数据库选项 探索有关 Google Cloud 的参考架构、图表、教程和最佳做法。查看我们的云架构中心。