1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        云原生時代微服務(wù)的正確姿勢

        共 3110字,需瀏覽 7分鐘

         ·

        2021-04-24 01:14



        今天主要講講云原生時代,微服務(wù)的正確站姿!在Spring Cloud Kubernetes之實戰(zhàn)二服務(wù)注冊與發(fā)現(xiàn) 一文中,講過spring-cloud 如何結(jié)合 K8s 來實現(xiàn)服務(wù)的注冊與發(fā)現(xiàn)。但如果非 springcloud 框架,或者非 Java 語言呢?那該如何使用 K8s 來實現(xiàn)服務(wù)的注冊與發(fā)現(xiàn)呢?



        1. K8s 組件

        • configMap
        • kube-apiserver
        • scheduler
        • etcd
        • controller
        • kube-proxy

        K8s 中主要通過 kube-proxy 負責為 Service 提供 cluster 內(nèi)部的服務(wù)發(fā)現(xiàn)和負載均衡,它是 K8s 集群內(nèi)部的負載均衡器,也是一個分布式代理服務(wù)器,在 K8s 的每個節(jié)點上都有一個,這一設(shè)計體現(xiàn)了它的伸縮性優(yōu)勢,需要訪問服務(wù)的節(jié)點越多,提供負載均衡能力的 kube-proxy 就越多,高可用節(jié)點也隨之增多。通過 K8s service 的 "ClusterIP" 來實現(xiàn)集群內(nèi)服務(wù)的 LB,當然,如果集群外需要訪問 Service 對應(yīng)的所有具有相同功能的 pod 應(yīng)用程序,則可以通過 K8s service 的另外一種方式來實現(xiàn):"NodePort"。

        2. 基于 Service 實現(xiàn)微服務(wù)負載均衡

        在 Java 語言,或其它語言中,通常需要做很多繁重的組件來實現(xiàn)服務(wù)的 LB。例如:Dubbo、SpringCloud、甚至 SpringCloudAlibaba 等。當然,對于 Python、Go 等語言,也有其 Restful API,所以也會集成標準的代理插件來進行做傳統(tǒng)的 LB。但對于云原生時代的到來,服務(wù)容器化讓微服務(wù)的訪問更好了。K8s Service 提供的 LB,即為無語言邊際的負載均衡,不用考慮任何語言的阻礙,只要是通用的 Restful API,即可借助 service 來進行處理集群內(nèi)部微服務(wù)之間的 LB。

        在 K8s 集群中,如果內(nèi)部訪問,可以簡單的通過 servicename 來進行訪問。例如:

        apiVersion: v1
        kind: Service
        metadata:
          name: web-server-service
          namespace: default
        spec:
          ports:
            - name: web-server
              port: 80
              targetPort: web-server-port
          selector:
            app: web-server

        通過 selector 將 service 與服務(wù) pod 對應(yīng)起來,創(chuàng)建一個微服務(wù)的 service,默認其形式是:ClusterIP,則可以通過如下來訪問該 service 對應(yīng)的后端 pod:

        curl http://$service_name.$namespace.svc.cluster.local:$service_port/api/v1/***

        這里,K8s 通過虛擬出一個集群 IP,利用 kube-proxy 為 service 提供 cluster 內(nèi)的服務(wù)發(fā)現(xiàn)和負載均衡,上面說了 kube-proxy 的功能。

        Name:              web-server-service
        Namespace:         default
        Type:              ClusterIP
        IP:                20.16.249.134
        Port:              <unset>  80/TCP
        TargetPort:        80/TCP
        Endpoints:         20.162.35.223:80
        Session Affinity:  None
        Events:            <none>

        3. 高可用案例

        3.1 傳統(tǒng)微服務(wù)請求案例

        傳統(tǒng)的微服務(wù)中,不同語言構(gòu)建的微服務(wù)架構(gòu)很多,一般直接通過 http 協(xié)議進行訪問,在同一種語言中,又會出現(xiàn)一種集成框架模式來實現(xiàn)微服務(wù)架構(gòu)。如:Java 中 Dubbo、Springcloud 等,但其繁瑣的框架結(jié)構(gòu)導(dǎo)致了服務(wù)的繁重。

        3.2 跨語言間微服務(wù)的互通

        在 k8s 集群內(nèi),通過 kube-proxy 結(jié)合 service 等一些功能組件來實現(xiàn)微服務(wù)之間的調(diào)用,不管是同語言也好,跨語言也罷。都會很好的進行處理,包括實現(xiàn)高可用以及負載均衡、服務(wù)治理等。


        任何一個 k8s 集群中的 pod 都可以通過 http 協(xié)議來訪問其它 pod 的服務(wù):

        root@rest-server-ver2-ds-vcfc7:/usr/src/app# curl http://web-server-service.kube-system.svc.cluster.local:80/api/v1/healthz
        {
          "status": {
            "code": 0,
            "msg""success"
          },
          "data""success"
        }root@rest-server-ver2-ds-vcfc7:/usr/src/app#


        其中的權(quán)限有的可以通過 namespace 來控制,有的可以通過服務(wù)本身的訪問權(quán)限來控制,但一切都可以進行訪問,不存在語言的差別對待。

        瀏覽 55
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            看女人日b | 蜜桃成人无码区免费视频网站 | 又粗又长又大又爽的视频 | 强伦女教师3伦理 | 顶级嫩模被啪到呻吟不断辣文 | 亚洲国产成人精品女人久久久 | 朝鲜全黄一级裸片视频 | 国产新婚疯狂做爰视频 | 美女骚逼| 男女网站在线看 |