spring cloud与K8S
spring cloud +docker 当然没有问题,只是当我们搭建集群实现高可用的时候,觉得k8s对于我们的情况更适用(我们多半的应用都是非Jvm程序),但是可能最后还是会二者皆用。
我的意思并不是说k8s 与spring cloud冲突。我们使用这两个技术的初衷都是为了实现应用的微服务化。然而对于微服务而言,有六个基本必须实现的1.进程通讯2.服务注册与发现3.负债均衡4.配置中心5.熔断器6.网关路由
其实两者都用是一个不错的解决方案。k8s和spring cloud 的出发点不同,一个是基于容器管理的概念,一个是基于程序的注册与发现(我个人认为Netflix 的核心在于注册中心)。二者都可以达到我们的目的。就拿实现一个高可用的注册中心Eureka 来说,单纯从Netflix的设计思想来说,eureka 是一个AP 系统,要保证数据的同步,可以采用注册中心(Eureka server )相互注册的方案,实现一个集群,但是集群每加入一个节点,要更新所有的client的配置。常规的思想,我们可以通过负载均衡的轮询算法实现,然而这个思路正是k8s 的出发点。可能Spring Cloud +K8s二者皆用是一个最好的方案,但是二者择其一一样可以达到目的。
By the way 一点小问题, Spring Cloud 中进程通讯是使用rest,性能和RPC 不是一个数量级上的,当应用被以一个很小的粒度拆分,可能有的服务与服务之间会存在链式的调用问题,性能上的差距将会更加明显。
……………………………………
研究SpringCloud有阵子了,搭建了一个springcloud微服务平台,昨天和公司的大牛们做了一下相关的技术分享,有了一些新的心得与体会,可能会推翻先前的所有工作吧。好处网上很多,我就不说了。实际过程中必然会遇到一些问题,Chris Richardson 微服务系列算是一个比较完善的理论前期支撑,里面也有谈到微服务会遇到的问题,我认为最大的问题还是运维部署问题吧!
总所周知,Spring cloud 的核心是Netflix微服务框架,非常成熟,但是在netflix oss开发初期,那个时候还没有docker,我们现在所有的服务都是通过虚拟容器承载的。
Netflix OSS的许多内容都是在一个已经过去的年代写出来的,那时所有东西都只能运行在AWS云上而没有其它选择。关于那个年代的许多宝贵遗产和前提假设都已经被封装到了Netflix的库里面,对于现在你运行的环境(比如Linux容器)已经不适用了。在Linux容器、Docker、容器管理系统等等出现之后,我们越来越看到把我们的微服务运行在Linux容器(公有云、私有云,或者都要,等等)里的巨大价值。另外,因为这些容器都是直接把这些服务打包起来、对外不透明的,所以我们倾向于不要过多关心在容器里面运行的到底是什么技术(是Java?还是Node.js?或者Go?)。Netflix
OSS主要是为Java开发者服务的,它是许多的库、框架和配置的集合,你需要把它们包含在你的Java程序或服务代码里面。
就服务发现而言,netflix是使用eureka,用Netflix OSS(SpringCloud Netflix也是一样的道理)时通常你要建立一台服务发现服务器,让所有可以被各种客户端发现的服务注册在这里。比如你用Netflix Ribbon来与各种其它服务交互,就需要能找出来它们都运行在哪里。各种服务可能下线,可能按它们自己的运行需要退出,也有可能我们要向集群中加入更多服务来做横向扩展。这种集中式的服务发现注册机制通常可以帮助我们跟踪集群中有哪些服务是可用的。
问题之一是,做为一个开发人员你需要做这些事情:
决定我到底是想要一个AP系统(Consul、Eureka等)还是CP系统(ZooKeeper、etcd等等)。
想明白在上了规模时如何运行、管理和监控这些系统(这可不是一个小小的演示系统)。
而且,你要找到对应你使用的编程语言的客户端库,才能与服务发现机制通信。回到我们刚才讨论的问题,微服务可能是用许多不同种语言实现的,所以可能一个成熟的Java客户端库好找,但相应的Go或Node.js库就没有了,那你只好自己写一个。可对每一种语言和每一个程序员,他们都可能对怎么实现这样的客户端库有自己的想法,这样你就会忙于维护各种不同的客户端库,做的事情功能都是一样的可是实现逻辑却各自不同。也有可能每种语言都会使用它自己的服务发现服务器而且也有它自己现成的客户端库呢?所以你就要为每一种语言都管理和维护不同的服务发现服务器吗?(Netflix oss Prana和SpringCloud Netflix sidecar 可以支持跨语言,但还是存在一些局限性)
当然,以上提出的问题是很小的一个点,更大的还是先前说的运维部署问题,当拆分出了成百上千个服务,会出现很多琐碎的问题,如Eureka高可用集群对clientService的配置问题。
令人欣喜的是,Kubernetes 貌似可以解决现在所遇到的问题,可能可以取代netflix的整套技术(只是可能,我也是今天开始调研的,有了新的进展再来谈谈Kubernetes 吧)
spring cloud与K8S的更多相关文章
- Kubernetes实战指南(三十一):零宕机无缝迁移Spring Cloud至k8s
1. 项目迁移背景 1.1 为什么要在"太岁"上动土? 目前公司的测试环境.UAT环境.生产环境均已经使用k8s进行维护管理,大部分项目均已完成容器化,并且已经在线上平稳运行许久. ...
- 039.[转] 基于 Kubernetes 和 Spring Cloud 的微服务化实践
http://dockone.io/article/2967 基于 Kubernetes 和 Spring Cloud 的微服务化实践 写在前面 网易云容器平台期望能给实施了微服务架构的团队提供完整的 ...
- 朱晔和你聊Spring系列S1E11:小测Spring Cloud Kubernetes @ 阿里云K8S
有关Spring Cloud Kubernates(以下简称SCK)详见https://github.com/spring-cloud/spring-cloud-kubernetes,在本文中我们主要 ...
- spring-cloud-kubernetes服务发现之在k8s环境下开发spring cloud应用
通常情况下,我们的线上的服务在迁移到k8s环境下的时候,都是采用平滑迁移的方案.服务治理与注册中心等都是采用原先的组件.比如spring cloud应用,在k8s环境下还是用原来的一套注册中心(如eu ...
- Spring Cloud Config整合Spring Cloud Kubernetes,在k8s上管理配置
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Kubernetes有专门的ConfigMap和Secret来管理配置,但它也有一些局限性,所以还是希望通过Spring C ...
- Spring Cloud 微服务架构学习笔记与示例
本文示例基于Spring Boot 1.5.x实现,如对Spring Boot不熟悉,可以先学习我的这一篇:<Spring Boot 1.5.x 基础学习示例>.关于微服务基本概念不了解的 ...
- Spring Cloud 从入门到精通
Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量. 本 ...
- Alibaba Nacos 学习(二):Spring Cloud Nacos Config
Alibaba Nacos 学习(一):Nacos介绍与安装 Alibaba Nacos 学习(二):Spring Cloud Nacos Config Alibaba Nacos 学习(三):Spr ...
- Alibaba Nacos 学习(三):Spring Cloud Nacos Discovery - FeignClient,Nacos 服务注册与发现
Alibaba Nacos 学习(一):Nacos介绍与安装 Alibaba Nacos 学习(二):Spring Cloud Nacos Config Alibaba Nacos 学习(三):Spr ...
随机推荐
- Ubuntu 16.04通过源码安装QUEM虚拟机
下载编译安装: wget http://download.qemu-project.org/qemu-2.9.0.tar.xz tar xvJf qemu-2.9.0.tar.xz cd qemu-2 ...
- 使用openssl生成密钥、加密和签名
openssl genrsa -out rsakey.pem 1024 //生成1024bit的RSA密钥,并保存到rsakey.pem,此处未对密钥进行加密 openssl genrsa -aes ...
- 关于MYsql 多字段排序
SELECT switch_data.* , lan_data.ename FROM switch_data , lan_data WHERE switch_data.address = '佳合丽景' ...
- springmvc-框架学习
https://www.androiddev.net/springmvc-框架学习一-helloworld/
- Linux下打包命令tar
转:http://blog.chinaunix.net/uid-29021161-id-3922752.html Linux下最常用的打包程序是tar,用tar命令打成的包文件通常以.tar结尾 1. ...
- SpringBoot拦截器中service或者redis注入为空的问题
原文:https://my.oschina.net/u/1790105/blog/1490098 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于 ...
- Vue基础知识总结(一)
一.基本语法: 1.实例化:new Vue({}) 2.el:一定是根容器元素(vue的作用域就是这个根元素内),就是写选择器 data:用于存储数据 methods:定义方法(方法里th ...
- 安装dubbo-admin报错 URIType BeanCreationException
安装dubbo-admin报错 URIType BeanCreationException 学习了:https://blog.csdn.net/lsm135/article/details/52725 ...
- mysql增量备份(2/2)
前言 这是在百度文库里看到的文章,原名叫做<MYSQL 完全与增量备份及恢复文档 >,是关于完全备份和增量备份以及恢复文档的...... 文档介绍 本文档采用 mysqldump 对数据 ...
- (二)Maven 基本概念——依赖、生命周期、仓库管理、聚合&继承
1. 依赖配置 1.1 依赖配置主要包含如下元素: <!--添加依赖配置--> <dependencies> <!--项目要使用到junit的jar包,所以在这里添加ju ...