<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          云原生時(shí)代 PHP/Golang 項(xiàng)目如何實(shí)現(xiàn)微服務(wù)

          共 1606字,需瀏覽 4分鐘

           ·

          2022-06-01 18:01

          作者:韓天峰

          來源:SegmentFault  思否社區(qū) 


          前言



          在傳統(tǒng)架構(gòu)下,我們需要使用服務(wù)發(fā)現(xiàn)、服務(wù)注冊(cè)等技術(shù)實(shí)現(xiàn)微服務(wù)架構(gòu)。通常我們需要將服務(wù)提供方(Service Provider)的節(jié)點(diǎn)(IP:PORT)保存在 ZooKeeper、ETCD、Consul、Nacos 等服務(wù)管理組件,服務(wù)調(diào)用方(Service Customer)可以讀取到節(jié)點(diǎn)列表,發(fā)起 RPC 調(diào)用,建立連接并發(fā)送請(qǐng)求、接收響應(yīng)。


          通常我們需要依賴特定框架的實(shí)現(xiàn),比如 Spring Cloud、Dubble、Hyperf 等框架。在云原生時(shí)代實(shí)現(xiàn)微服務(wù)不再需要這樣,我們可以直接使用 K8s 提供的 Service 來實(shí)現(xiàn)微服務(wù)架構(gòu),將服務(wù)注冊(cè)發(fā)現(xiàn)下沉到系統(tǒng)底層。可靠性更高,穩(wěn)定性更好,而且是天然跨語言的,Java、PHP、Golang 都可以使用,開發(fā)框架也會(huì)變得更簡單,不需要做任何事情,只需要實(shí)現(xiàn)服務(wù)的邏輯,監(jiān)聽本機(jī)端口即可。


          K8s Service 介紹



          Service 是 K8s 提供的發(fā)現(xiàn)后端 Pod 的一種機(jī)制,為一組具有屬于同一個(gè) Deployment 的所有 Pod 提供了統(tǒng)一的入口地址,將請(qǐng)求進(jìn)行負(fù)載分發(fā)到各個(gè) Pod 。



          在 K8s 中 Pod 就相當(dāng)于是 Linux 系統(tǒng)的進(jìn)程,是執(zhí)行應(yīng)用程序的容器組。如何訪問 Pod 中的服務(wù)呢?直接去連接 Pod 的 IP:Port 肯定是不行的,因?yàn)樗遣环€(wěn)定的,隨時(shí)可能會(huì)發(fā)生調(diào)度而重啟,Pod 的生命周期是非常短暫的。而 Pod 重啟之后 IP 端口會(huì)發(fā)生變化。一個(gè)服務(wù)或應(yīng)用通常會(huì)有 1-N 個(gè) Pod,請(qǐng)求 Service 的 IP:PORT 時(shí)會(huì)自動(dòng)負(fù)載均衡并轉(zhuǎn)發(fā)到其中一個(gè) Pod,Service 一般是使用 kube-proxy 和 Linux 內(nèi)核提供的 IPVS 技術(shù)實(shí)現(xiàn)。也可以理解為 Service 其實(shí)就是一個(gè)4層代理,后端是應(yīng)用的 Pod,在 Service 之前我們可以設(shè)置 Ingress 接入網(wǎng)關(guān),允許從集群外部訪問,一般對(duì)外服務(wù)的 HTTP 接口就是這個(gè)方式。也可以直接使用,只允許內(nèi)部訪問,這就是微服務(wù)模式。


          在 Code-Galaxy 平臺(tái)上使用 Service



          K8s 為每個(gè)Service分配了一個(gè) Name,這個(gè) Name 已經(jīng)注冊(cè)到了 CoreDNS 中,可直接使用 gethostbyname 或其他 DNS 解析方法,將 Server Name 解析成 Service 的 IP 地址。一個(gè) Service 需要設(shè)置對(duì)外端口,也就是訪問此 Service 對(duì)外暴露的端口,另外一個(gè)是內(nèi)部端口,也就是 Pod 的端口。Pod 相關(guān)的信息會(huì)被保存在 K8s 的 ETCD 分布式存儲(chǔ)中。




          例如使用 Hyperf 框架,默認(rèn)會(huì)監(jiān)聽 9501 端口,對(duì)外希望服務(wù)調(diào)用方直接通過 80 端口訪問,那 Service 的內(nèi):外分別就是 9501:80 。這時(shí)就在其他服務(wù)中就可以使用 HTTP 客戶端訪問 http://ServiceName:80/ 來請(qǐng)求此服務(wù)了。


          不同的命名空間互相訪問時(shí),需要在Server Name之后追加.{$namespace}




          參考



          1. https://blog.csdn.net/huahua1999/article/details/124237065

          2. https://blog.51cto.com/u_15049785/4174726




          點(diǎn)擊左下角閱讀原文,到 SegmentFault 思否社區(qū) 和文章作者展開更多互動(dòng)和交流,掃描下方”二維碼“或在“公眾號(hào)后臺(tái)回復(fù)“ 入群 ”即可加入我們的技術(shù)交流群,收獲更多的技術(shù)文章~

          - END -


          瀏覽 78
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成黄免费看 | 操逼链接| 黄色日韩欧美 | 日本一区精品 | 黄免费视频 |