精华内容
下载资源
问答
  • 为了方便大家阅读,可以关注头条号或微信公众号,后续所有的文章将在移动端首发,想学习更多云原生知识,请关注我。前言k8s已经成为了容器管理和编排的标准,当应用容器化到K8S后,如何根据服务器资源自动伸缩应用,...

    作者:justmine

    头条号:大数据达摩院

    微信公众号:大数据处理系统

    创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。

    为了方便大家阅读,可以关注头条号或微信公众号,后续所有的文章将在移动端首发,想学习更多云原生知识,请关注我。

    前言

    k8s已经成为了容器管理和编排的标准,当应用容器化到K8S后,如何根据服务器资源自动伸缩应用,以应对任何的突发流量。

    请考虑如何实现以下应用场景?

    当服务器高负载时,自动扩容应用服务运行数量;当服务器低负载时,自动缩减应用服务运行数量,以实现“合适规模”的应用部署,从而更好地利用集群资源

    本篇就来演示K8S如何实现上面的场景。

    准备工作

    安装metrics-server

    项目地址:

    https://github.com/kubernetes-sigs/metrics-server

    Kubernetes Metrics Server 是集群中资源使用情况数据的聚合器。

    下载

    wget https://github.com/kubernetes-sigs/metrics-server/archive/v0.3.6.tar.gz && tar -xzf v0.3.6.tar.gz;

    部署

    # Kubernetes 1.7$ kubectl create -f metrics-server-0.3.6/deploy/1.7/# Kubernetes > 1.8$ kubectl create -f metrics-server-0.3.6/deploy/1.8+/

    验证

    kubectl get deployment metrics-server -n kube-system

    41f9798513119b4ab829c165e2569e4e.png

    演示

    1、创建一个简单的 Apache Web 服务器应用程序

    kubectl run httpd --image=httpd --requests=cpu=100m --limits=cpu=200m --expose --port=80

    向此Apache Web服务器Pod提供100 millicpu和200 MB内存,并在端口80上提供服务。

    2、为 httpd 部署创建 Horizontal Pod Autoscaler 资源。

    kubectl autoscale deployment httpd --cpu-percent=50 --min=1 --max=10

    为Apache Web服务器创建50%CPU利用率的Autoscaler,并设置伸缩参数,如下:

    • min(下限)=1:当平均CPU负载低于50%时,Autoscaler尝试减少部署中的Pod数量,最低1个。

    • max(上限)=10:当平均CPU负载大于50%时,Autoscaler尝试增加部署中的Pod数量,最高10个。

    查看Autoscaler详细信息,如下:

    命令:kubectl describe hpa/httpd

    0d35f446df050689849fcf33a6d3ae47.png

    3、模拟高负载

    向Apache Web服务器并发50万请求,命令如下:

    kubectl run apache-bench -i --tty --rm --image=httpd -- ab -n 500000 -c 1000 http://httpd.default.svc.cluster.local/

    输出:

    01393fbdb2683865e202ca31ba3bac39.png

    4、查看Apache Web服务器整个自动伸缩过程

    kubectl get horizontalpodautoscaler.autoscaling/httpd --watch

    6dda00813878c82e8edc9e134826f36e.png

    从上面可以看出,当服务器高负载时,Pod数量从1扩容到了10;当服务器低负载时,Pod数量从10又缩减到了1,这就是K8S的水平伸缩过程,也是K8S相对于传统部署方式的突出优势。

    总结

    本篇演示了K8S的水平伸缩,这种伸缩方式非常适合于无状态服务,那么问题来了,如下:

    如何伸缩有状态服务呢?

    答案:使用K8S的垂直伸缩器。

    当K8S集群资源不够,如何进行集群级别的伸缩呢?

    答案:使用K8S的集群伸缩器。

    欲知后事如何,请关注下回演示。

    工欲善其事,必先利其器,K8S还有很多超能力,想学习更多K8S知识,及相关实践,可以关注我。

    参考

    https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale

    https://github.com/kubernetes/community/blob/master/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md

    https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/horizontal-pod-autoscaler.html

    展开全文
  • 为了方便大家阅读,可以关注头条号或微信公众号,后续所有的文章将在移动端首发,想学习更多云原生知识,请关注我。前言k8s已经成为了容器管理和编排的标准,当应用容器化到K8S后,如何根据服务器资源自动伸缩应用,...

    作者:justmine

    头条号:大数据达摩院

    微信公众号:大数据处理系统

    创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。

    为了方便大家阅读,可以关注头条号或微信公众号,后续所有的文章将在移动端首发,想学习更多云原生知识,请关注我。

    前言

    k8s已经成为了容器管理和编排的标准,当应用容器化到K8S后,如何根据服务器资源自动伸缩应用,以应对任何的突发流量。

    请考虑如何实现以下应用场景?

    当服务器高负载时,自动扩容应用服务运行数量;当服务器低负载时,自动缩减应用服务运行数量,以实现“合适规模”的应用部署,从而更好地利用集群资源

    本篇就来演示K8S如何实现上面的场景。

    准备工作

    安装metrics-server

    项目地址:

    https://github.com/kubernetes-sigs/metrics-server

    Kubernetes Metrics Server 是集群中资源使用情况数据的聚合器。

    下载

    wget https://github.com/kubernetes-sigs/metrics-server/archive/v0.3.6.tar.gz && tar -xzf v0.3.6.tar.gz;

    部署

    # Kubernetes 1.7$ kubectl create -f metrics-server-0.3.6/deploy/1.7/# Kubernetes > 1.8$ kubectl create -f metrics-server-0.3.6/deploy/1.8+/

    验证

    kubectl get deployment metrics-server -n kube-system

    b6b59df7db8130f50248ceaf8d786f56.png

    演示

    1、创建一个简单的 Apache Web 服务器应用程序

    kubectl run httpd --image=httpd --requests=cpu=100m --limits=cpu=200m --expose --port=80

    向此Apache Web服务器Pod提供100 millicpu和200 MB内存,并在端口80上提供服务。

    2、为 httpd 部署创建 Horizontal Pod Autoscaler 资源。

    kubectl autoscale deployment httpd --cpu-percent=50 --min=1 --max=10

    为Apache Web服务器创建50%CPU利用率的Autoscaler,并设置伸缩参数,如下:

    • min(下限)=1:当平均CPU负载低于50%时,Autoscaler尝试减少部署中的Pod数量,最低1个。
    • max(上限)=10:当平均CPU负载大于50%时,Autoscaler尝试增加部署中的Pod数量,最高10个。

    查看Autoscaler详细信息,如下:

    命令:kubectl describe hpa/httpd

    f55a34bfe6634d7e6855dc6a62a92aa8.png

    3、模拟高负载

    向Apache Web服务器并发50万请求,命令如下:

    kubectl run apache-bench -i --tty --rm --image=httpd -- ab -n 500000 -c 1000 http://httpd.default.svc.cluster.local/

    输出:

    418dd9fb3a56766535f69df68eb91925.png

    向Apache Web服务器并发50万请求

    4、查看Apache Web服务器整个自动伸缩过程

    kubectl get horizontalpodautoscaler.autoscaling/httpd --watch

    2d46aeb9dd6777eaba9902d5dd99d6a8.png

    整个水平伸缩过程

    从上面可以看出,当服务器高负载时,Pod数量从1扩容到了10;当服务器低负载时,Pod数量从10又缩减到了1,这就是K8S的水平伸缩过程,也是K8S相对于传统部署方式的突出优势。

    总结

    本篇演示了K8S的水平伸缩,这种伸缩方式非常适合于无状态服务,那么问题来了,如下:

    如何伸缩有状态服务呢?

    答案:使用K8S的垂直伸缩器。

    当K8S集群资源不够,如何进行集群级别的伸缩呢?

    答案:使用K8S的集群伸缩器。

    欲知后事如何,请关注下回演示。

    工欲善其事,必先利其器,K8S还有很多超能力,想学习更多K8S知识,及相关实践,可以关注我。

    参考

    https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale

    https://github.com/kubernetes/community/blob/master/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md

    https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/horizontal-pod-autoscaler.html

    展开全文
  • 微服务网关

    2018-03-01 14:31:46
    微服务架构中,有大量的微服务,且每个微服务都是随机部署的,微服务还会因为软件故障或硬件故障进行迁移,根据访问量进行自动弹缩(即负载大时,自动多启动几个微服务实例,负载小时,自动关闭几个微服务实例) ...

    1、微服务信息管理中心(有人称之为服务发现、服务注册)

    微服务架构中,有大量的微服务,且每个微服务都是随机部署的,微服务还会因为软件故障或硬件故障进行迁移,根据访问量进行自动弹缩(即负载大时,自动多启动几个微服务实例,负载小时,自动关闭几个微服务实例)

    微服务直接为了互相访问,需要有一个信息管理中心,大家把自己的名字、ip、端口等注册上去,其它微服务就可以查询到这些信息,从而实现互相访问。

    这个信息管理中心是整个系统的一个瓶颈,一旦瘫掉,整个系统都不能使用。所以必须是一个集群。

    业内有下面这些开源软件:consul,eureka , zookeeper、etcd

    参考 http://blog.csdn.net/zzhou1990/article/details/72667659

    2、服务网关

    微服务都部署在内网,想对外提供功能,就需要一个服务网关。

    nginx反向代理似乎可以完成这个事情。

    但是,总不能手工不断去配置吧。

    业内开源的有:Zuul、OpenResty、nginx+lua

    --------------web大容量扩展技术----

    1、反向代理负载均衡(包括基于软件的,基于硬件的)

    2、DNS 多IP

    3、IP层进行负载均衡,比如dnat等基于内核转发的技术。处理能力能达到ngnix的2倍。

    展开全文
  • 为了实现微服务架构的高可用性,一般在生产环境中,各个微服务会部署多个实例。这里我们需要用到负载均衡,将服务消费者的请求分摊到多个服务提供者实例上。 Ribbon Ribbon 是Netflix发布的负载均衡器,它有助于...

    目录


    前言

    为了实现微服务架构的高可用性,一般在生产环境中,各个微服务会部署多个实例。这里我们需要用到负载均衡,将服务消费者的请求分摊到多个服务提供者实例上。

    Ribbon

    Ribbon 是Netflix发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为。Ribbon配置好后,它可以根据如轮询,随机等负载均衡算法自动帮助服务消费去请求。在Spring Cloud中,Ribbon 与Eureka可以很好的配合 ,Ribbon向Eureka注册后可以自动从Eureka中获取服务提供者的地址列表,然后基于某种负载均衡算法去请求其中一个服务提供者实例。

    集成Ribbon

    在Spring Cloud中使用Ribbon很简单,只需要做一点小修改。
    微服务简单实例–电影购票 中的服务消费者为基础进行修改。

    添加依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>

    由于 Eureka已经包含了Ribbon 所以这里其实不需要添加上面这个依赖了。

    添加注解

    还需要为RestTemplate添加@LoadBalanced注解。

    @EnableDiscoveryClient
    @SpringBootApplication
    public class MicroserviceConsumerMovieRibbonApplication {
    
        /**
         * @Bean 是一个方法注解,作用是实例化一个Bean并使用该方法的名称命名。在本例中,添加@Bean注解的restTemplate()方法,等价于RestTemplate restTemplate = new RestTemplate();
         * @LoadBalanced 可以为RestTemplate整合Ribbon 使其具备负载均衡的能力。
         * @return
         */
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    
        public static void main(String[] args) {
            SpringApplication.run(MicroserviceConsumerMovieRibbonApplication.class, args);
        }
    }

    修改Controller

    @RestController
    public class UserController {
        private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class);
        @Autowired
        private RestTemplate restTemplate;
        @Autowired
        private LoadBalancerClient loadBalancerClient;
    
    
        @GetMapping("/user/{id}")
        public User findById(@PathVariable Long id){
            return this.restTemplate.getForObject("http://microservice-provider-user/" + id,User.class);
        }
    
        @GetMapping("/log-user-instance")
        public void logUserinstance(){
            ServiceInstance serviceInstance = this.loadBalancerClient.choose("microservice-provider-user");
            UserController.LOGGER.info("{}:{}:{}",serviceInstance.getServiceId(),serviceInstance.getHost(),serviceInstance.getPort());
        }
    }

    这里需要把请求地址改成 http://microservice-provider-user/ 。microservice-provider-user是用户微服务(服务提供者)的虚拟主机名。当Ribbon与Eureka配合使用时,会自动将虚拟主机名映射成微服务的网络地址。在新增的方法logUserinstance() 方法中使用LoadBalancerClient 的API更加直观的获取当前选择的用户微服务节点。
    注意需要在服务提供者的配置文件中添加其虚拟主机名,并且命令不能使用 _ :

    spring:
      application:
        name: microservice-provider-user

    测试

    我们启动前文中 微服务学习笔记 –使用Spring Cloud Eureka实现服务注册与发现 的一个Eureka项目,启动多个服务提供者,因为是在本地做测试,需要把端口改成不一样的,避免端口占用。最后启动修改后的服务消费者。查看Eureka界面:
    微信截图_20180806151100.png
    可以看到在Eureka上注册了三个服务提供者,分别使用了不同的端口号。另外还注册了集成Ribbon后的服务消费者。
    访问localhost:8010/user/1 可以请求到数据
    微信截图_20180806155709.png
    多次请求后后台可以看到请求会随机分配给不同的服务提供者。
    微信截图_20180806155835.png
    可以通过访问 http://localhost:8010/log-user-instance 更加直观的查看负载均衡效果。
    多次访问 http://localhost:8010/log-user-instance ,查看后台日志如下:
    微信截图_20180806160158.png

    展开全文
  • 随着近几年微服务的兴起,越来越多的人使用springcloud作为微服务框架(基于java语言实现微服务框架),因此就产生了这样的需求:能否将非java语言实现的项目接入到springcloud框架中。 答案是肯定的,springcloud...
  • 使用SpringCloud + Gradle构建的微服务项目版本如下: SpringCloud:Finchley.SR1 SpringBoot:2.0.4.RELEASE Gradle:4.8这个项目用于微服务分解的例子,没有实现具体的数据库操作,只是为了展示分割后的效果,用于...
  • 微服务的服务治理

    千次阅读 2018-07-10 22:00:03
    服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来...比如,有两个服务A和B,其中服务A需要调用服务B来完成一个业务操作时,为了实现服务B的高可用,不论采用服务端负载均衡还是客户端负载均衡,都需要...
  • 服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册与发现。为了解决微服务架构中服务实例维护问题,产生了大量的服务治理框架和产品。这些框架和产品的实现都是围绕着...
  • Spring Cloud Eureka是Spring Cloud Netflix微服务中...它主要用来实现各个微服务实例的自动化注册与发现。 为了解决微服务架构中的服务实例维护问题,产生了大量的服务治理框架和产品,这下框架和产品的实现都围绕...
  • 为什么要使用服务发现设想下,我们写了一些通过REST API或者Thrift API调用某个服务的代码,为了发起这个请求,代码需要知道服务实例的网络地址(IP 地址和端口号)。在传统运行在物理机器上的应用中,某个服务实例的...
  • 设想下,我们写了一些通过REST API或者Thrift API调用某个服务的代码,为了发起这个请求,代码需要知道服务实例的网络地址(IP 地址和端口号)。在传统运行在物理机器上的应用中,某个服务实例的网络地址一般是静态的...
  • Spring Cloud微服务项目完整示例目的是为了演示基于Spring Cloud微服务框架,搭建一个接近业务实际场景的项目,只实现了后端项目,前端可以使用VUE或者其他框架。后端框架包括注册中心 Eureka、配置中心Spring Cloud...
  • 服务治理是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册与发现。 问:为什么在微服务架构中需要服务治理模块? 答:随着业务的发展,系统功能越来越复杂,相对应的微服务应用也...
  • 在生产系统中,如果我们的服务只有一个实例,如果由于异常或其他原因导致该服务停止,则整个系统将处于宕机状态,系统无法正常运行,为了解决整个问题,我们可以在一个服务器上,开启多个端口不通的服务实例或者在多...
  • 每个服务所拥有的功能具有独立性强的特点,这样的设计就实现了单个服务的高内聚,服务于服务之间的低耦合效果,这些小服务就是微服务,基于这种方法设计的系统架构即微服务架构。 二 微服务架构中服务发现的实现 ...
  • 本文通过代码实例演示如何通过UAA实现微服务之间的安全调用。uaa: 身份认证服务,同时也作为被调用的资源服务。服务端口9999。microservice1: 调用uaa的消费者服务,服务端口8081。1 准备工作1.1 工程目录--| ...
  • 服务治理 Spring Cloud Eureka 服务治理:是微服务架构中最为基础和重要的一个模块。...A需要调用B来实现一些业务的功能,为了实现服务B的高可用,可以通过集群的方式来实现,测试据需要维护服务B...
  • 微服务---消息总线BUS

    2020-05-03 10:26:57
    之前通过SpringCloudConfig实现过手动刷新(微服务—分布式配置中心Config),但是可以发现这样还是很不方便,如果实例的数量很多,需要多次手动刷新。为了解决这个问题,我们引入了消息总线SpringCloudBus。 Spring...
  • 设想下,我们写了一些通过REST API或者Thrift API调用某个服务的代码,为了发起这个请求,代码需要知道服务实例的网络地址(IP 地址和端口号)。在传统运行在物理机器上的应用中,某个服务实例的网络地址一般是静态的...
  • 本文通过代码实例演示如何通过UAA实现微服务之间的安全调用。 uaa: 身份认证服务,同时也作为被调用的资源服务。服务端口9999。 microservice1: 调用uaa的消费者服务,服务端口8081。 1 准备工作 1.1 工程目录 --| ...
  • 因此在基于微服务的项目中为了简化前端的调用逻辑,通常会引入API Gateway作为轻量级网关,同时API Gateway中也会实现相关的认证逻辑从而简化内部服务之间相互调用的复杂度。2、数据裁剪以及聚合​ 通常而言不同的...
  • 为什么需要API Gateway 1、简化客户端调用复杂度 Spring Cloud大型...因此在基于微服务的项目中为了简化前端的调用逻辑,通常会引入API Gateway作为轻量级网关,同时API Gateway中也会实现相关的认证逻辑从而简化内...
  • 弹性伸缩是一种为了满足业务需求、保证服务质量、平衡服务成本的重要应用管理策略。 弹性伸缩让应用的部署规模,能够根据实时的业务量产生动态调整,在业务高峰期,扩大部署规模,保证服务不被业务冲垮;在业务低谷...
  • 通过前面基础组件的学习,我们已经可以利用这些组件搭建一个比较完整的微服务架构,为了巩固我们前面学习的知识,从本文开始,将以一个实际的案例带领大家构建一个完整的微服务架构(本文代码已放在 Github 上)。...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 167
精华内容 66
关键字:

为了实现微服务实例