如何使用微服务架构构建 WordPress Web 应用程序

WordPress 是一个功能强大的内容管理系统(CMS),可以为不同类型的网站和应用程序奠定基础。它使用的是典型的 “单体架构”,但随着网站的发展,这可能不是最合适的架构。这就是 “微服务架构 “的优势所在。

如何使用微服务架构构建 WordPress Web 应用程序

什么是微服务

在单体架构中,应用程序的所有组件之间都是紧密耦合的。它本质上是作为单一服务运行的。这是一种开发应用程序的简单方法,但随着复杂性的增加,维护和可扩展性可能会成为一个挑战。

相比之下,微服务可以帮助将应用程序分解成一系列更小的服务。每个服务在开发、部署和扩展方面都相互独立。每个服务处理特定的任务,并通过应用编程接口(API)与其他服务通信。例如,一个典型的电子商务网站有购物车、结账、订单处理、产品页面等。

如何使用微服务架构构建 WordPress Web 应用程序

是什么让微服务从整体架构中脱颖而出

微服务的高级“电梯推销”是指如何结合不同的技术和工具来创建一个整体。还有其他更深层次的特征值得注意:

  • 解耦:每个服务都保持独立性。这意味着你可以为每项工作使用最好的技术,而不是应对不合适的框架。
  • 自治:通过扩展,集成的服务不需要相互依赖来实现高性能运行。
  • 专业化:当然,每个服务都会专注于自己的工作,这又会影响性能。
  • 弹力:这种固有的高性能资产的一部分是,一次服务故障不会导致整个站点瘫痪。

除了这些方面之外,使用微服务还有更多优势:

  • 可扩展性:可以根据个人需求扩展个人服务,而不会影响应用程序的其余部分。
  • 灵活性:已经简要概述了服务如何使用最好的技术来完成工作。这甚至扩展到用来创建它们的编程语言。
  • 更快的发展:可以更快地开发小型且集中的服务,更好地了解服务的功能,并更轻松地维护系统。
  • 改进的故障隔离:通过“模块化”设置,可以在服务失败时隔离该服务,而不会影响其他服务。

另一方面,微服务可能会带来通信、数据一致性和管理分布式系统的复杂性。因此,必须仔细权衡应用程序的要求。

如何使用微服务架构构建 WordPress Web 应用程序

微服务架构的组件

微服务架构可以由多个组件组成。就像“齿轮”在整个“轮子”中协同工作,提供可扩展且可维护的应用程序。

因此,有一些组件对于顺利实施至关重要:

  • API网关:这是任何客户端请求的入口点。它将这些请求转移到适当的微服务。它还可以处理速率限制和身份验证等任务。
  • 服务发现:需要采用动态方式让微服务发现并相互通信。Consul或 Eureka等工具可以在这方面提供帮助。
  • 容器化:使用Docker等工具将微服务打包并部署为容器是很常见的。这就是为每项服务提供隔离的方式。
  • 编排:当向应用程序添加微服务时,管理它们变得更加复杂。Kubernetes等工具可以帮助实现服务管理的自动化。
  • 缓存:Redis或Memcached等缓存机制通常会提高性能。考虑到后端服务和数据库的压力更大,这一点至关重要。
  • 消息传递:当然,服务也需要相互通信。这是RabbitMQApache Kafka等“异步”消息传递解决方案的工作。这些“消息代理”可实现微服务之间的松散耦合。

不过,工具只是设置的一方面。还有其他考虑因素,例如如何在完整架构中设计每个微服务。

如何使用微服务架构构建 WordPress Web 应用程序

微服务的设计模式

微服务的设计模式在这里与开发工作流程中的其他地方一样重要。考虑到应用程序的潜在复杂性,重要的是要考虑哪些模式会产生最大的影响。主要有三点:

  • 每个服务数据库:每个微服务都使用自己的专用数据库,这有助于数据隔离和自治。
  • API 组合:可以组合微服务来创建更高级别的服务或 API。这种灵活性和可重用性是最大的好处。
  • 事件驱动架构:在这里,服务将通过事件进行通信。这有利于更松散的耦合和异步处理。

微服务和 WordPress REST API

WordPress REST API 在实现站点和微服务之间的集成方面发挥着至关重要的作用。它的端点可以让你使用 JSON 输出来检索和操作 WordPress 帖子、页面、用户、分类法等。

[
  {
    "id": 1,
    "date": "2020-04-01T10:30:00",
    "date_gmt": "2020-04-01T14:30:00",
    "guid": {
      "rendered": "https://example.com/?p=1"
    },
    "modified": "2020-04-01T10:30:00",
    "modified_gmt": "2020-04-01T14:30:00",
    "slug": "hello-world",
    "status": "publish",
    "type": "post",
    "link": "https://example.com/hello-world/",
    "title": {
      "rendered": "Hello World"
    },
    …

因此,REST API 是架构中所有其他服务的枢纽。这意味着必须选择将哪些当前网站服务提取为微服务。我们会在后面的文章中更详细地讨论这个问题。

关键在于确定网络应用中的不同功能和职责。在此基础上,可以将它们拆分为独立、集中和可部署的微服务。

使用 Create Block 主题和微服务构建 Web 应用程序

了解使用微服务和创建块主题插件构建 Web 应用程序的过程。第一步是设置开发环境。

1.搭建开发环境

每个应用程序都从一个用于创建它的空间开始。因此,需要一个开发环境。开发空间有两个位置:本地计算机和服务器。设置本地开发环境的方法有很多。

2. 设置创建块主题插件

设置好开发环境后,就可以开始使用创建块主题插件来创建自定义的基于块的主题。还需要以下内容:

  • 一个可以使用的 WordPress 网站。
  • 编码编辑器。
  • 创建块主题插件。

可以按照典型的 WordPress 方式安装该插件。从那里,前往WordPress 中的“外观”>“创建块主题”链接:

如何使用微服务架构构建 WordPress Web 应用程序

查看“外观”选项卡,可以发现“管理主题字体”选项。创建块主题还可以访问此选项,这是WordPress 6.5 字体库功能。

如何使用微服务架构构建 WordPress Web 应用程序

这些将成为你文件中的主题标识字段style.css。它们也很简单,包括为WordPress 主题目录选择名称、屏幕截图、URL 和一些标签。

点击确认后,再次转到“外观”>“主题”屏幕,就可以看到你的新主题已经准备就绪:

如何使用微服务架构构建 WordPress Web 应用程序

设置和使用创建块主题的提示

由于超出了本篇文章的讨论范围,我们将不对新的区块主题进行过多的定制。不过,这里有一些使用创建区块主题的提示:

  • 可以在两个地方进行修改。可以使用 “全站编辑器 “中的 “全局样式 “选项,也可以自定义theme.json文件。
  • 创建区块主题可以让你根据当前活动主题生成一个子主题。

3. 提取选择的微服务

区块主题准备就绪后,就可以更仔细地检查微服务了。需要做出的一个关键决定是,哪些服务将成为 “微服务”。

根据自己的需求来决定就好。不过,有几个因素需要注意:

  • 网站的功能:查看网站提供的任何独特功能,并考虑将其拆分为单独的微服务,例如支付功能。
  • 独立可扩展性:依赖于独立扩展的现有服务将是微服务的良好候选者。缓存就是一个例子。
  • 技术多样性:如果需要摆脱 WordPress 的 PHP 架构,这也是另一种微服务的候选方案。对于特定的电子商务平台或后台组件来说,情况差不多就是这样。
  • 数据隔离:具有自定义数据存储要求的服务可以是微服务。如果这些服务不需要与其他服务共享数据,也属于这种情况。
如何使用微服务架构构建 WordPress Web 应用程序

开发和部署微服务

要处理并最终部署微服务,需要依赖其他工具。下面是可以用的一些关键注意事项和工具:

  • Docker通常是容器化微服务的方式。它将微服务及其依赖项打包在一起,使其易于部署和扩展。
  • 每个微服务也需要一个Dockerfile。它应该指定需要的必要依赖项、配置和运行时环境。
  • 使用Kubernetes进行容器编排和管理。
  • 持续集成和部署 (CI/CD) 管道可以成为自动化构建、测试和部署的方式。GitLab和Travis CI等工具可以帮助简化 CI/CD 流程。
  • 无服务器功能不需要成熟的服务器,因此它们非常适合微服务。AWS Lambda、Google Cloud Functions 或 Azure Functions等平台无需预置或管理服务器即可运行代码。
  • API 网关为微服务提供单一入口点。KongAmazon API Gateway等工具可以帮助管理和保护 API。此外,它们还可以处理身份验证、速率限制和请求路由等任务。

这时候,拥有一个彼此独立的 WordPress 网站和微服务。最后一步是将它们集成。

4. 将微服务与 WordPress 集成

开发并部署微服务后,需要将它们与 WordPress 集成。为此,需要从 WordPress 向微服务公开的端点进行 API 调用。需要彻底了解 REST API。

在 WordPress 中执行此操作的典型方法是使用wp_remote_get()wp_remote_post()。这可以让你发送 HTTP 请求并处理响应。以下是一些示例代码,说明它们如何组合在一起:

// API endpoint URL

$api_url = 'https://api.example.com/endpoint';

// API request parameters

$params = array(
    'param1' => 'value1',
    'param2' => 'value2',
);


// Make the API request using wp_remote_get
$response = wp_remote_get(add_query_arg($params, $api_url));

// Check if the request was successful
if (is_wp_error($response)) {
    // Handle the error
    $error_message = $response->get_error_message();

    // Log or display the error message
} else {
    // Process the API response
    $response_body = wp_remote_retrieve_body($response);

    $data = json_decode($response_body, true);

    // Use the retrieved data as needed

    // ...
}

微服务通常受益于异步数据获取以避免阻塞主线程。 WordPress 可以结合两个元素来做到这一点。可以使用API Fetch 包async以及deferWordPress 6.3 中引入的支持。

import apiFetch from '@wordpress/api-fetch';

// Microservice API endpoint URL
const microserviceUrl = 'https://api.example.com/microservice';
...


// Make the API request to the microservice
apiFetch({
  path: microserviceUrl,
  method: 'GET',
  data: params,
})

  .then((response) => {
    // Process the response
    console.log(response);

    // Use the retrieved data from the microservice

    // ...
  })
...

还可以考虑使用 AJAX来执行动态用户界面 (UI) 更新。适当的身份验证和安全措施也至关重要。 WordPress REST API 包括几种对会话进行身份验证的方法,例如使用 cookie、JSON Web 令牌 (JWT) 或应用程序密码。鉴于对外部解决方案的依赖,保持微服务和站点的安全至关重要。

鉴于我们使用的是自定义 Block 主题,该过程由三个部分组成:注册 Block渲染内容和处理数据。JavaScript将是您选择的语言,该registerBlockType函数将处理注册和渲染

// JavaScript function that builds the Block to enable access within the Block Editor.
( function( blocks, element ) {
    var el = element.createElement;

    blocks.registerBlockType( 'my-micro/stripe-api', {
        title: 'Stripe Payment Gateway',
        icon: 'dashicons-cart',
        category: 'embed',

        edit: function() {
            return el(
                'div',
                {},
                '' // Create the visual elements of the microservice to display within the Block Editor.
            );
        },
…

总结

WordPress 是单体式的,但这并不妨碍它采用微服务。这样做有很多好处,比如提高可扩展性、灵活性和开发速度。创建块主题插件可以让你为项目的其他部分创建一个简洁、安全的代码库。微服务会给网站带来复杂性。使用自定义块主题意味着可以根据需要以最佳方式实现这些服务。


联系我们
文章看不懂?联系我们为您免费解答!免费助力个人,小企站点!
电话:020-2206-9892
QQ咨询:1025174874
邮件:info@361sale.com
工作时间:周一至周五,9:30-18:30,节假日休息
发布者:光子波动,转转请注明出处:https://www.361sale.com/9427/

(0)
上一篇 2024年 5月 8日 上午10:37
下一篇 2024年 5月 8日 下午5:55

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

020-2206-9892

QQ咨询:1025174874

邮件:info@361sale.com

工作时间:周一至周五,9:30-18:30,节假日休息

客服微信
购买我们的托管服务器,享受免费运维!