1、微服务简介

微服务优点

  • 服务组件化

    每个服务独立开发、部署,有效避免一个服务的修改引起整个系统重新部署
  • 技术栈灵活

    约定通信方式,是得服务本身功能实现对技术要求不再那么铭感
  • 独立部署

    每个微服务独立部署,加快部署速度,方便扩展
  • 扩展性强

    每个微服务可以部署多个,并且有负载均衡能力
  • 独立数据

    每个微服务有独立的基本组件,例如数据库、缓存等

微服务缺点

  • 沟通成本
  • 数据一致性
  • 运维成本
  • 内部架构复杂性

微服务和单体应用

单体应用,易于部署、测试,但是会使得代码膨胀,难以维护,构建和部署成本大,新人上手难

适用于微服务的框架:Spring Boots、Spring Cloud、Dubbo

2、K8s部署微服务考虑的问题

微服务架构图

微服务流程图

  • 微服务间如何通信?

    REST API、RPC、MQ

  • 微服务如何发现彼此?

    通过注册中心进行注册,发现

  • 组件之间怎么个调用关系?

    微服务内部处理逻辑

  • 那个服务作为整个网站入口?

    网关,即gateway

  • 那些微服务需要对外访问?

    只需要网关入口对外即可

  • 微服务怎么部署?更新?扩容?

    基于Kubernetes就可以轻易实现

  • 区分有状态应用和无状态应用?

    无状态应用:不考虑存储,不维护有状态信息,也不考虑和其它服务副本是否有关系

    有状态应用:有固定存储,例如:mysql、mongodb

有状态应用不建议部署到kubernetes

为什么要用注册中心

微服务太多面临的问题:

  • 怎么记录一个微服务多个副本接口地址?
  • 怎么实现一个微服务多个副本负载均衡?
  • 怎么判断一个微服务副本是否可用?

    主流注册中心:Eureka,Nacos

不同环境如何区分配置文件

  • configmap
  • entrypoint.sh
  • java -jar --spring.profiles.active=dev xxx.jar
  • 统一配置中心,例如:Apollo,Disconf

3、项目迁移到k8s流程

  1. 制作镜像(应用程序、运行环境、文件系统)

  2. 控制器管理Pod

    Deployment:无状态部署

    StatefulSet:有状态部署

    DaemonSet:守护进程部署

    Job & CronJob:批处理

  3. 暴露应用

    Service定义了Pod的逻辑集合和访问这个集合的策略

    Service引入为了解决Pod的动态变化,提供服务发现和负载均衡

    支持Cluster IP,NodePort以及LocalBalancer三种类型

    Service的底层实现主要实现有iptables和ipvs两种网络模式

    使用CoreDNS解析Service名称

    通过Label关联Pod

  4. 对外发布应用(ingress)

    通过Service关联Pod

    基于域名访问

    通过Ingress Controller实现Pod的负载均衡(支持TCP/UDP 4层和HTTP 7层)

  5. 日志/监控

    容器部署过程中一般有以下三种数据:

    启动时需要初始化数据,可以是配置文件。

    启动过程中产生的临时数据,该临时数据需要多个容器共享

    启动过程中产生的持久化数据

    主流方案:FileBeat + ELK、Prometheus + Grafana

微服务交付至kubernetes流程的更多相关文章

  1. Kong 微服务网关在 Kubernetes 的实践

    来源:分布式实验室译者:qianghaohao本文主要介绍将 Kong 微服务网关作为 Kubernetes (https://www.alauda.cn)集群统一入口的最佳实践,之前写过一篇文章使用 ...

  2. 从Spring Cloud微服务视角理解Kubernetes

  3. 为什么 kubernetes 天然适合微服务 (3)

    此文已由作者刘超授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 四.Kubernetes 本身就是微服务架构 基于上面这十个设计要点,我们再回来看 Kubernetes,会发现 ...

  4. 为什么 kubernetes 天然适合微服务 (2)

    此文已由作者刘超授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 三.微服务化的十个设计要点 微服务有哪些要点呢?第一张图是 SpringCloud 的整个生态. 第二张图是微服 ...

  5. 为什么 kubernetes 天然适合微服务 (1)

    此文已由作者刘超授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 最近总在思考,为什么在支撑容器平台和微服务的竞争中,Kubernetes 会取得最终的胜出,事实上从很多角度出发 ...

  6. 【SFA官方翻译】使用 Kubernetes、Spring Boot 2.0 和 Docker 的微服务快速指南

    [SFA官方翻译]使用 Kubernetes.Spring Boot 2.0 和 Docker 的微服务快速指南 原创: Darren Luo SpringForAll社区 今天 原文链接:https ...

  7. Openstack+Kubernetes+Docker微服务实践

    Openstack+Kubernetes+Docker微服务实践 .....   Openstack+Kubernetes+Docker微服务实践之路--选型 posted @ 2016-11-15 ...

  8. 解读与部署(三):基于 Kubernetes 的微服务部署即代码

    在基于 Kubernetes 的基础设施即代码一文中,我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊使用的基础设施是如何使用代码描述的,以及它的 ...

  9. 使用 Nocalhost 开发 Rainbond 上的微服务应用

    本文将介绍如何使用 Nocalhost 快速开发 Rainbond 上的微服务应用的开发流程以及实践操作步骤. Nocalhost 可以直接在 Kubernetes 中开发应用,Rainbond 可以 ...

随机推荐

  1. webpack环境配置2

    1.webpack安装 Step 1: 首先安装Node.js, 在1中已经详细介绍了. Step2: 在Git或者cmd中输入下面这段代码, 通过全局先将webpack指令安装进电脑中npm ins ...

  2. ZYNQ自定义AXI总线IP应用——PWM实现呼吸灯效果

    一.前言 在实时性要求较高的场合中,CPU软件执行的方式显然不能满足需求,这时需要硬件逻辑实现部分功能.要想使自定义IP核被CPU访问,就必须带有总线接口.ZYNQ采用AXI BUS实现PS和PL之间 ...

  3. Java树结构

    今天在项目中,运用到了Java树结构,是在一个查询中,选择树结构例如图片 该结构采用了前段的最新的知识,通过xml结构的数据库,后端Spring的映射实现的. 代码示例: 数据库: <!-- 取 ...

  4. 神奇的background——绘制图形

    相信大家在平时工作中少不了会被要求在某些元添加一些特殊的背景图片,这时候通常就拿起ps就是切切切.不说这种方式麻烦,有ui给你切好的情况已经不错,没有的就有自己动手.还可能有需要切一整张超大图的情况. ...

  5. vue+express+mysql项目总结(node项目部署阿里云通用)

    原文发布于我的个人博客上:原文点这里   前面经历千辛万苦,终于把博客的所有东西都准备好了,现在就只等部署了.下面我介绍下我的部署过程: 一.购买服务器和域名   如果需要域名(不用域名通过ip也可以 ...

  6. C/C++ 手动开O2

    手动O2比赛不能用,平时玩玩就好 #pragma GCC optimize (2) #pragma G++ optimize (2)

  7. Mac结合Docker开发

    Mac结合Docker开发 前几天在看Java并发实战时,在Mac上写了一个示例,结果运行后无法按照书本上运行.主要是有些命令,在Mac和Linux是有区别的,比如top, Mac上是不支持-Hp,意 ...

  8. 基于springboot1.5.9整合shiro时出现静态文件找不到的问题

    开门见山吧,上午对shiro进行整合了下,因为之前使用ssm框架对shiro框架整合过,所以觉得使用springboot再次对shiro框架进行整合也是没啥问题,但最后整合完之后,使用thymelea ...

  9. 遍历Map的四种方式(Java)

    public static void main(String[] args) { Map<String, String> map = new HashMap<String, Stri ...

  10. 深入学习用 Go 编写 HTTP 服务器

    Go是一门通用的编程语言,想要学习 Go 语言的 Web 开发,就必须知道如何用 Go 启动一个 HTTP 服务器用于接收和响应来自客户端的 HTTP 请求.用 Go实现一个http server非常 ...