理解微服务:开发人员的初学者指南ð - ð»
#编程 #go #microservices #developers

曾经有过冒犯的感觉吗?如果是,那么您并不孤单。
我作为后端开发专业的开发人员的旅程一直是过山车。
有时候,我以为我没有取得任何进展。
丹·约翰(Dan John)的引用:“如果重要的话,每天都要做。 我将此原则应用于编程,并且一直在提供帮助。

微服务的概念可以应用于学习软件开发。这主要是关于构建和部署软件应用程序作为小型独立服务的集合,而不是单一的应用程序。

很容易被使用并尝试一次学习的不同技术所淹没。这种方法总是没有帮助建立坚实的基础。
我已经了解到,从基础知识开始,然后逐渐拾取后来加起来成为一名精通现场的精通。

因此,在这篇文章中,我们将研究软件开发中的微服务。

什么是微服务?

微服务是一项小型独立服务,在应用程序中执行特定功能。每个服务都运行自己的流程,并通过轻巧的机制(例如API)与其他服务进行通信。这些服务可以用不同的编程语言编写,可以部署在不同的服务器上。这允许在开发过程中的灵活性和可伸缩性。

微服务的引线:

  1. 技术多样性:可以以不同的语言和技术开发微服务,从而可以使用最佳工具来使用工作。

  2. 可伸缩性:每个服务都可以独立缩放,这有助于处理高流量或实施新功能的过程。

  3. 弹性:使用微服务时,如果一项服务失败,其他服务可以继续运行,使整体应用程序更具弹性。

  4. 灵活性:可以独立开发和部署服务,从而更快地开发和部署周期。

关于如何实施微服务的概述:

  1. 确定服务:将应用程序分解为执行特定功能的较小服务。

  2. 定义通信机制:确定服务之间的轻量级机制,例如API。

  3. 开发和部署服务:独立开发和部署每个服务

  4. 测试和监视:测试和监视每项服务以确保它们正常工作并确定潜在问题。

这是如何使用GO和HTTP实现简单的微服务体系结构的示例:

简单电子商务应用程序的微服务体系结构

假设我们正在构建一个具有目录服务,订单服务和付款服务的电子商务应用程序。每个服务都将以自己的端点运行,并通过HTTP请求相互通信。

首先,让我们创建一个简单的目录服务,以返回JSON格式的产品列表:

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type Product struct {
    ID      int         `json:"id"`
    Name    string  `json:"name"`
    Price   int         `json:"price"`
}

var products = []Product{
    {ID: 1, Name: "Product 1", Price: 100},
    {ID: 2, Name: "Product 2", Price: 200},
    {ID: 3, Name:   "Product 3", Price: 300},
}

func main() {
    http.HandleFunc("/products", func(w http.ResponseWriter, r *http.Request) {
        json.NewEncoder(w).Encode(products)
    })

    fmt.Println("Starting server on port 8000")
    http.ListenAndServe(":8000", nil)
}

此服务在端点/products上运行,并返回包含产品列表的JSON对象。

接下来,让我们创建一个获取产品ID并创建订单的订单服务:

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type Order struct {
    ID                  int         `json:"id"`
    ProductID       int         `json:"product_id"`
    CustomerID  int         `json:"customer_id"`
    Status          string  `json:"status"`
}

var orderID = 1

var orders = []Order{}

func main() {
    http.HandleFunc("/order", func(w http.ResponseWriter, r *http.Request) {
        if r.Method == "POST" {
            var order Order
            json.NewDecoder(r.Body).Decode(&order)
            order.ID = orderID
            orderID++
            orders = append(orders, order)
            json.NewEncoder(w).Encode(order)
        } else {
            json.NewEncoder(w).Encode(orders)
        }
    })

    fmt.Println("Starting server on port 8001")
    http.ListenAndServe(":8001", nil)
}

此服务在端点“/订单”上运行,并接受包含产品ID和客户ID的JSON对象的帖子请求。然后,它创建订单并以JSON格式返回订单信息。

最后,我们将创建一个付款服务,以获取订单ID并处理付款:

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type Payment struct{
    ID              int         `json:"id"`
    OrderID     int         `json:"order_id"`
    Amount      int         `json:"amount"`
    Status      string  `json:"status"`
}

var paymentID = 1

var payments = []Payment{}

func main() {
    http.HandleFunc("/payment", func(w http.ResponseWriter, r *http.Request) {
        if r.Method == "POST" {
            var payment Payment
            json.NewDecoder(r.Body).Decode(&payment)
            payment.ID = paymentID
            paymentID++
            payment.Status = "success"
            payments = append(payments, payment)
            json.NewEncoder(w).Encode(payment)
        } else {
            json.NewEncoder(w).Encode(payments)
        }
    })

    // displays the server starting

    fmt.Println("Starting server on port 8002")
    http.ListenAndServe(":8002", nil)
}

此服务在端点/payment上运行,并接受包含订单ID和金额的JSON对象的帖子请求。然后,它处理付款并以JSON格式返回付款信息,包括付款状态。

从我们的示例中,我们可以看到目录服务,订单服务和付款服务都按照自己的端点独立运行,并通过HTTP请求相互通信。这允许在开发和部署方面灵活性,并易于单独扩展和测试每个服务。

现实世界中的微服务架构比这个示例更为复杂,需要最佳实践,例如服务发现,负载平衡和安全性。
通过适当的计划和实施,微服务可能是您下一个项目的绝佳选择。

直到下一次。

编码