如何使用微服務(wù)架構(gòu)構(gòu)建 WordPress Web 應(yīng)用程序

WordPress 是一個功能強(qiáng)大的內(nèi)容管理系統(tǒng)(CMS),可以為不同類型的網(wǎng)站和應(yīng)用程序奠定基礎(chǔ)。它使用的是典型的 “單體架構(gòu)”,但隨著網(wǎng)站的發(fā)展,這可能不是最合適的架構(gòu)。這就是 “微服務(wù)架構(gòu) “的優(yōu)勢所在。

圖片[1]-如何使用微服務(wù)架構(gòu)構(gòu)建 WordPress Web 應(yīng)用程序-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

什么是微服務(wù)

在單體架構(gòu)中,應(yīng)用程序的所有組件之間都是緊密耦合的。它本質(zhì)上是作為單一服務(wù)運(yùn)行的。這是一種開發(fā)應(yīng)用程序的簡單方法,但隨著復(fù)雜性的增加,維護(hù)和可擴(kuò)展性可能會成為一個挑戰(zhàn)。

相比之下,微服務(wù)可以幫助將應(yīng)用程序分解成一系列更小的服務(wù)。每個服務(wù)在開發(fā)、部署和擴(kuò)展方面都相互獨(dú)立。每個服務(wù)處理特定的任務(wù),并通過應(yīng)用編程接口(API)與其他服務(wù)通信。例如,一個典型的電子商務(wù)網(wǎng)站有購物車、結(jié)賬、訂單處理、產(chǎn)品頁面等。

圖片[2]-如何使用微服務(wù)架構(gòu)構(gòu)建 WordPress Web 應(yīng)用程序-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

是什么讓微服務(wù)從整體架構(gòu)中脫穎而出

微服務(wù)的高級“電梯推銷”是指如何結(jié)合不同的技術(shù)和工具來創(chuàng)建一個整體。還有其他更深層次的特征值得注意:

  • 解耦:每個服務(wù)都保持獨(dú)立性。這意味著你可以為每項(xiàng)工作使用最好的技術(shù),而不是應(yīng)對不合適的框架。
  • 自治:通過擴(kuò)展,集成的服務(wù)不需要相互依賴來實(shí)現(xiàn)高性能運(yùn)行。
  • 專業(yè)化:當(dāng)然,每個服務(wù)都會專注于自己的工作,這又會影響性能。
  • 彈力:這種固有的高性能資產(chǎn)的一部分是,一次服務(wù)故障不會導(dǎo)致整個站點(diǎn)癱瘓。

除了這些方面之外,使用微服務(wù)還有更多優(yōu)勢:

  • 可擴(kuò)展性:可以根據(jù)個人需求擴(kuò)展個人服務(wù),而不會影響應(yīng)用程序的其余部分。
  • 靈活性:已經(jīng)簡要概述了服務(wù)如何使用最好的技術(shù)來完成工作。這甚至擴(kuò)展到用來創(chuàng)建它們的編程語言。
  • 更快的發(fā)展:可以更快地開發(fā)小型且集中的服務(wù),更好地了解服務(wù)的功能,并更輕松地維護(hù)系統(tǒng)。
  • 改進(jìn)的故障隔離:通過“模塊化”設(shè)置,可以在服務(wù)失敗時隔離該服務(wù),而不會影響其他服務(wù)。

另一方面,微服務(wù)可能會帶來通信、數(shù)據(jù)一致性和管理分布式系統(tǒng)的復(fù)雜性。因此,必須仔細(xì)權(quán)衡應(yīng)用程序的要求。

圖片[3]-如何使用微服務(wù)架構(gòu)構(gòu)建 WordPress Web 應(yīng)用程序-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

微服務(wù)架構(gòu)的組件

微服務(wù)架構(gòu)可以由多個組件組成。就像“齒輪”在整個“輪子”中協(xié)同工作,提供可擴(kuò)展且可維護(hù)的應(yīng)用程序。

因此,有一些組件對于順利實(shí)施至關(guān)重要:

  • API網(wǎng)關(guān):這是任何客戶端請求的入口點(diǎn)。它將這些請求轉(zhuǎn)移到適當(dāng)?shù)奈⒎?wù)。它還可以處理速率限制和身份驗(yàn)證等任務(wù)。
  • 服務(wù)發(fā)現(xiàn):需要采用動態(tài)方式讓微服務(wù)發(fā)現(xiàn)并相互通信。Consul或 Eureka等工具可以在這方面提供幫助。
  • 容器化:使用Docker等工具將微服務(wù)打包并部署為容器是很常見的。這就是為每項(xiàng)服務(wù)提供隔離的方式。
  • 編排:當(dāng)向應(yīng)用程序添加微服務(wù)時,管理它們變得更加復(fù)雜。Kubernetes等工具可以幫助實(shí)現(xiàn)服務(wù)管理的自動化。
  • 緩存:Redis或Memcached等緩存機(jī)制通常會提高性能??紤]到后端服務(wù)和數(shù)據(jù)庫的壓力更大,這一點(diǎn)至關(guān)重要。
  • 消息傳遞:當(dāng)然,服務(wù)也需要相互通信。這是RabbitMQApache Kafka等“異步”消息傳遞解決方案的工作。這些“消息代理”可實(shí)現(xiàn)微服務(wù)之間的松散耦合。

不過,工具只是設(shè)置的一方面。還有其他考慮因素,例如如何在完整架構(gòu)中設(shè)計(jì)每個微服務(wù)。

圖片[4]-如何使用微服務(wù)架構(gòu)構(gòu)建 WordPress Web 應(yīng)用程序-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

微服務(wù)的設(shè)計(jì)模式

微服務(wù)的設(shè)計(jì)模式在這里與開發(fā)工作流程中的其他地方一樣重要??紤]到應(yīng)用程序的潛在復(fù)雜性,重要的是要考慮哪些模式會產(chǎn)生最大的影響。主要有三點(diǎn):

  • 每個服務(wù)數(shù)據(jù)庫:每個微服務(wù)都使用自己的專用數(shù)據(jù)庫,這有助于數(shù)據(jù)隔離和自治。
  • API 組合:可以組合微服務(wù)來創(chuàng)建更高級別的服務(wù)或 API。這種靈活性和可重用性是最大的好處。
  • 事件驅(qū)動架構(gòu):在這里,服務(wù)將通過事件進(jìn)行通信。這有利于更松散的耦合和異步處理。

微服務(wù)和 WordPress REST API

WordPress REST API 在實(shí)現(xiàn)站點(diǎn)和微服務(wù)之間的集成方面發(fā)揮著至關(guān)重要的作用。它的端點(diǎn)可以讓你使用 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 是架構(gòu)中所有其他服務(wù)的樞紐。這意味著必須選擇將哪些當(dāng)前網(wǎng)站服務(wù)提取為微服務(wù)。我們會在后面的文章中更詳細(xì)地討論這個問題。

關(guān)鍵在于確定網(wǎng)絡(luò)應(yīng)用中的不同功能和職責(zé)。在此基礎(chǔ)上,可以將它們拆分為獨(dú)立、集中和可部署的微服務(wù)。

使用 Create Block 主題和微服務(wù)構(gòu)建 Web 應(yīng)用程序

了解使用微服務(wù)和創(chuàng)建塊主題插件構(gòu)建 Web 應(yīng)用程序的過程。第一步是設(shè)置開發(fā)環(huán)境。

1.搭建開發(fā)環(huán)境

每個應(yīng)用程序都從一個用于創(chuàng)建它的空間開始。因此,需要一個開發(fā)環(huán)境。開發(fā)空間有兩個位置:本地計(jì)算機(jī)和服務(wù)器。設(shè)置本地開發(fā)環(huán)境的方法有很多。

2. 設(shè)置創(chuàng)建塊主題插件

設(shè)置好開發(fā)環(huán)境后,就可以開始使用創(chuàng)建塊主題插件來創(chuàng)建自定義的基于塊的主題。還需要以下內(nèi)容:

  • 一個可以使用的 WordPress 網(wǎng)站。
  • 編碼編輯器。
  • 創(chuàng)建塊主題插件。

可以按照典型的 WordPress 方式安裝該插件。從那里,前往WordPress 中的“外觀”>“創(chuàng)建塊主題”鏈接:

圖片[5]-如何使用微服務(wù)架構(gòu)構(gòu)建 WordPress Web 應(yīng)用程序-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

查看“外觀”選項(xiàng)卡,可以發(fā)現(xiàn)“管理主題字體”選項(xiàng)。創(chuàng)建塊主題還可以訪問此選項(xiàng),這是WordPress 6.5 字體庫功能。

圖片[6]-如何使用微服務(wù)架構(gòu)構(gòu)建 WordPress Web 應(yīng)用程序-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

這些將成為你文件中的主題標(biāo)識字段style.css。它們也很簡單,包括為WordPress 主題目錄選擇名稱、屏幕截圖、URL 和一些標(biāo)簽。

點(diǎn)擊確認(rèn)后,再次轉(zhuǎn)到“外觀”>“主題”屏幕,就可以看到你的新主題已經(jīng)準(zhǔn)備就緒:

圖片[7]-如何使用微服務(wù)架構(gòu)構(gòu)建 WordPress Web 應(yīng)用程序-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

設(shè)置和使用創(chuàng)建塊主題的提示

由于超出了本篇文章的討論范圍,我們將不對新的區(qū)塊主題進(jìn)行過多的定制。不過,這里有一些使用創(chuàng)建區(qū)塊主題的提示:

  • 可以在兩個地方進(jìn)行修改??梢允褂?“全站編輯器 “中的 “全局樣式 “選項(xiàng),也可以自定義theme.json文件。
  • 創(chuàng)建區(qū)塊主題可以讓你根據(jù)當(dāng)前活動主題生成一個子主題。

3. 提取選擇的微服務(wù)

區(qū)塊主題準(zhǔn)備就緒后,就可以更仔細(xì)地檢查微服務(wù)了。需要做出的一個關(guān)鍵決定是,哪些服務(wù)將成為 “微服務(wù)”。

根據(jù)自己的需求來決定就好。不過,有幾個因素需要注意:

  • 網(wǎng)站的功能:查看網(wǎng)站提供的任何獨(dú)特功能,并考慮將其拆分為單獨(dú)的微服務(wù),例如支付功能。
  • 獨(dú)立可擴(kuò)展性:依賴于獨(dú)立擴(kuò)展的現(xiàn)有服務(wù)將是微服務(wù)的良好候選者。緩存就是一個例子。
  • 技術(shù)多樣性:如果需要擺脫 WordPress 的 PHP 架構(gòu),這也是另一種微服務(wù)的候選方案。對于特定的電子商務(wù)平臺或后臺組件來說,情況差不多就是這樣。
  • 數(shù)據(jù)隔離:具有自定義數(shù)據(jù)存儲要求的服務(wù)可以是微服務(wù)。如果這些服務(wù)不需要與其他服務(wù)共享數(shù)據(jù),也屬于這種情況。
圖片[8]-如何使用微服務(wù)架構(gòu)構(gòu)建 WordPress Web 應(yīng)用程序-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

開發(fā)和部署微服務(wù)

要處理并最終部署微服務(wù),需要依賴其他工具。下面是可以用的一些關(guān)鍵注意事項(xiàng)和工具:

  • Docker通常是容器化微服務(wù)的方式。它將微服務(wù)及其依賴項(xiàng)打包在一起,使其易于部署和擴(kuò)展。
  • 每個微服務(wù)也需要一個Dockerfile。它應(yīng)該指定需要的必要依賴項(xiàng)、配置和運(yùn)行時環(huán)境。
  • 使用Kubernetes進(jìn)行容器編排和管理。
  • 持續(xù)集成和部署 (CI/CD) 管道可以成為自動化構(gòu)建、測試和部署的方式。GitLab和Travis CI等工具可以幫助簡化 CI/CD 流程。
  • 無服務(wù)器功能不需要成熟的服務(wù)器,因此它們非常適合微服務(wù)。AWS Lambda、Google Cloud Functions 或 Azure Functions等平臺無需預(yù)置或管理服務(wù)器即可運(yùn)行代碼。
  • API 網(wǎng)關(guān)為微服務(wù)提供單一入口點(diǎn)。KongAmazon API Gateway等工具可以幫助管理和保護(hù) API。此外,它們還可以處理身份驗(yàn)證、速率限制和請求路由等任務(wù)。

這時候,擁有一個彼此獨(dú)立的 WordPress 網(wǎng)站和微服務(wù)。最后一步是將它們集成。

4. 將微服務(wù)與 WordPress 集成

開發(fā)并部署微服務(wù)后,需要將它們與 WordPress 集成。為此,需要從 WordPress 向微服務(wù)公開的端點(diǎn)進(jìn)行 API 調(diào)用。需要徹底了解 REST API。

在 WordPress 中執(zhí)行此操作的典型方法是使用wp_remote_get()wp_remote_post()。這可以讓你發(fā)送 HTTP 請求并處理響應(yīng)。以下是一些示例代碼,說明它們?nèi)绾谓M合在一起:

// 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

    // ...
}

微服務(wù)通常受益于異步數(shù)據(jù)獲取以避免阻塞主線程。 WordPress 可以結(jié)合兩個元素來做到這一點(diǎn)。可以使用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來執(zhí)行動態(tài)用戶界面 (UI) 更新。適當(dāng)?shù)纳矸蒡?yàn)證和安全措施也至關(guān)重要。 WordPress REST API 包括幾種對會話進(jìn)行身份驗(yàn)證的方法,例如使用 cookie、JSON Web 令牌 (JWT) 或應(yīng)用程序密碼。鑒于對外部解決方案的依賴,保持微服務(wù)和站點(diǎn)的安全至關(guān)重要。

鑒于我們使用的是自定義 Block 主題,該過程由三個部分組成:注冊 Block、渲染內(nèi)容和處理數(shù)據(jù)。JavaScript將是您選擇的語言,該registerBlockType函數(shù)將處理注冊和渲染

// 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.
            );
        },
…

總結(jié)

WordPress 是單體式的,但這并不妨礙它采用微服務(wù)。這樣做有很多好處,比如提高可擴(kuò)展性、靈活性和開發(fā)速度。創(chuàng)建塊主題插件可以讓你為項(xiàng)目的其他部分創(chuàng)建一個簡潔、安全的代碼庫。微服務(wù)會給網(wǎng)站帶來復(fù)雜性。使用自定義塊主題意味著可以根據(jù)需要以最佳方式實(shí)現(xiàn)這些服務(wù)。


聯(lián)系我們
教程看不懂?聯(lián)系我們?yōu)槟赓M(fèi)解答!免費(fèi)助力個人,小企站點(diǎn)!
客服微信
客服微信
電話:020-2206-9892
QQ咨詢:1025174874
郵件:info@361sale.com
工作時間:周一至周五,9:30-18:30,節(jié)假日休息
? 轉(zhuǎn)載聲明
本文作者:Harry
THE END
喜歡就支持一下吧
點(diǎn)贊0 分享
評論 搶沙發(fā)

請登錄后發(fā)表評論

    暫無評論內(nèi)容