曾经有过冒犯的感觉吗?如果是,那么您并不孤单。
我作为后端开发专业的开发人员的旅程一直是过山车。
有时候,我以为我没有取得任何进展。
丹·约翰(Dan John)的引用:“如果重要的话,每天都要做。
我将此原则应用于编程,并且一直在提供帮助。
微服务的概念可以应用于学习软件开发。这主要是关于构建和部署软件应用程序作为小型独立服务的集合,而不是单一的应用程序。
很容易被使用并尝试一次学习的不同技术所淹没。这种方法总是没有帮助建立坚实的基础。
我已经了解到,从基础知识开始,然后逐渐拾取后来加起来成为一名精通现场的精通。
因此,在这篇文章中,我们将研究软件开发中的微服务。
什么是微服务?
微服务是一项小型独立服务,在应用程序中执行特定功能。每个服务都运行自己的流程,并通过轻巧的机制(例如API)与其他服务进行通信。这些服务可以用不同的编程语言编写,可以部署在不同的服务器上。这允许在开发过程中的灵活性和可伸缩性。
微服务的引线:
-
技术多样性:可以以不同的语言和技术开发微服务,从而可以使用最佳工具来使用工作。
-
可伸缩性:每个服务都可以独立缩放,这有助于处理高流量或实施新功能的过程。
-
弹性:使用微服务时,如果一项服务失败,其他服务可以继续运行,使整体应用程序更具弹性。
-
灵活性:可以独立开发和部署服务,从而更快地开发和部署周期。
关于如何实施微服务的概述:
-
确定服务:将应用程序分解为执行特定功能的较小服务。
-
定义通信机制:确定服务之间的轻量级机制,例如API。
-
开发和部署服务:独立开发和部署每个服务
-
测试和监视:测试和监视每项服务以确保它们正常工作并确定潜在问题。
这是如何使用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请求相互通信。这允许在开发和部署方面灵活性,并易于单独扩展和测试每个服务。
现实世界中的微服务架构比这个示例更为复杂,需要最佳实践,例如服务发现,负载平衡和安全性。
通过适当的计划和实施,微服务可能是您下一个项目的绝佳选择。
直到下一次。
编码