云原生时代跨语言间微服务的打法

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 基于K8s的云原生基础架构,实现微服务应用的正确绽放。

1. K8s 组件

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


K8s 中主要通过 kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡,它是 K8s 集群内部的负载均衡器,也是一个分布式代理服务器,在 K8s 的每个节点上都有一个,这一设计体现了它的伸缩性优势,需要访问服务的节点越多,提供负载均衡能力的 kube-proxy 就越多,高可用节点也随之增多。通过 K8s service 的 "ClusterIP" 来实现集群内服务的 LB,当然,如果集群外需要访问 Service 对应的所有具有相同功能的 pod 应用程序,则可以通过 K8s service 的另外一种方式来实现:"NodePort"。

2. 基于 Service 实现微服务负载均衡

在 Java 语言,或其它语言中,通常需要做很多繁重的组件来实现服务的 LB。例如:Dubbo、SpringCloud、甚至 SpringCloudAlibaba 等。当然,对于 Python、Go 等语言,也有其 Restful API,所以也会集成标准的代理插件来进行做传统的 LB。但对于云原生时代的到来,服务容器化让微服务的访问更好了。K8s Service 提供的 LB,即为无语言边际的负载均衡,不用考虑任何语言的阻碍,只要是通用的 Restful API,即可借助 service 来进行处理集群内部微服务之间的 LB。

在 K8s 集群中,如果内部访问,可以简单的通过 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 与服务 pod 对应起来,创建一个微服务的 service,默认其形式是:ClusterIP,则可以通过如下来访问该 service 对应的后端 pod:

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


这里,K8s 通过虚拟出一个集群 IP,利用 kube-proxy 为 service 提供 cluster 内的服务发现和负载均衡,上面说了 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 传统微服务请求案例

传统的微服务中,不同语言构建的微服务架构很多,一般直接通过 http 协议进行访问,在同一种语言中,又会出现一种集成框架模式来实现微服务架构。如:Java 中 Dubbo、Springcloud 等,但其繁琐的框架结构导致了服务的繁重。

3.2 跨语言间微服务的互通

在 k8s 集群内,通过 kube-proxy 结合 service 等一些功能组件来实现微服务之间的调用,不管是同语言也好,跨语言也罢。都会很好的进行处理,包括实现高可用以及负载均衡、服务治理等。


任何一个 k8s 集群中的 pod 都可以通过 http 协议来访问其它 pod 的服务:

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#

其中的权限有的可以通过 namespace 来控制,有的可以通过服务本身的访问权限来控制,但一切都可以进行访问,不存在语言的差别对待。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
17天前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
33 3
|
4天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 11 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
3天前
|
Cloud Native API 微服务
微服务引擎 MSE 及云原生 API 网关 2024 年 11 月产品动态
微服务引擎 MSE 及云原生 API 网关 2024 年 11 月产品动态。
|
8天前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器化到微服务
本文将带领读者踏上云原生的旅程,深入探讨容器化和微服务架构的概念、优势以及它们如何共同推动现代软件的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务应用,并解释相关的配置和操作。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供有价值的见解和实操指南。
|
11天前
|
Cloud Native API 持续交付
云原生时代的微服务架构设计
随着云计算的蓬勃发展,云原生概念逐渐成为IT行业的热点。本文将通过深入浅出的方式,介绍在云原生环境下,如何设计一个高效、可扩展的微服务架构。文章不仅涉及理论概念,还将结合实际代码示例,帮助读者理解微服务架构的核心要素和设计原则,以及如何在云平台上实现这些设计。
|
14天前
|
Kubernetes Cloud Native 开发者
云原生入门:从容器到微服务
本文将带你走进云原生的世界,从容器技术开始,逐步深入到微服务架构。我们将通过实际代码示例,展示如何利用云原生技术构建和部署应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
16天前
|
消息中间件 运维 Cloud Native
云原生架构下的微服务优化策略####
本文深入探讨了云原生环境下微服务架构的优化路径,针对服务拆分、通信效率、资源管理及自动化运维等核心环节提出了具体的优化策略。通过案例分析与最佳实践分享,旨在为开发者提供一套系统性的解决方案,以应对日益复杂的业务需求和快速变化的技术挑战,助力企业在云端实现更高效、更稳定的服务部署与运营。 ####
|
22天前
|
Cloud Native 云计算 Docker
云原生技术的崛起:从容器化到微服务架构
云原生技术的崛起:从容器化到微服务架构
|
24天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
43 5