云原生时代下的Java“拯救者”

在云原生时代,其实Java程序是有很大的劣势的,以最流行的spring boot/spring cloud微服务框架为例,启动一个已经优化好,很多bean需要lazy load的application至少需要3-4秒时间,内存需要几百M,业务逻辑稍微复杂一点点,没有1G以上的内存是很难满足业务的需要呢?

在讨论夸克斯(Quarkus)之前,我们先了解一下什么是云原生。为什么说下一代Java云原生服务就是Quarkus?

云原生架构简介

Cloud Native(云原生),这是一个既陌生又熟悉的名词,它是Matt Stine提出的一个概念,它是一个思想的集合,包括:DevOps、持续交付(Continuous Delivery)、微服务(MicroServices)、敏捷基础设施(Agile Infrastructure)、康威定律(Conways Law)等

Cloud Native(云原生)准确来说也是一种文化,更是一种潮流,它是云计算的一个必然导向,意义在于让云成为云化战略成功的基石,而不是障碍。

Cloud Native(云原生)的特点和方面:

  • 技术(微服务,敏捷基础设施)
  • 管理(DevOps,持续交付,康威定律,重组等)

Cloud Native也可以说是一系列Cloud技术、企业管理方法的集合。

Cloud Native(云原生)的定义和概念

Cloud Native(云原生)是更好的工具、自我修复系统、和自动化系统的集合,可以让应用和基础设施的部署和故障修复更加快速和敏捷,极大的降低企业在云计算方面的部署成本。

目前业界公认的云原生主要包括以下几个层面的内容。

  • 容器,服务网格,微服务,不可变的基础设施,公开的API都接近云原生相关概念。

  • 云原生技术可以让系统松耦合,支持弹性伸缩、可管理的、清晰的。

随着容器、kubernetes、Serverless、FaaS技术的演进,CNCF(Cloud Native Computing Foundation ,云原生计算基金会)把云原生的概念更广泛地定义为“让应用更有弹性、容错性、观测性的基础技术,让应用更容易部署、管理的基础软件、让应用更容易编写、编排的运行框架等”,希望能够让开发者最好的利用云的资源、产品和交付能力。

云原生的发展历程

  • 2004 年 ~ 2007 年,Google 已在内部大规模地使用像 Cgroups 这样的容器技术;
  • 2008 年,Google 将 Cgroups 合并进入了 Linux 内核主干。
  • 2013 年,Docker 项目正式发布。
  • 2014 年,Kubernetes 项目也正式发布。
    • Kubernetes项目发布的原因也非常容易理解,因为有了容器和 Docker 之后,就需要有一种方式去帮助大家方便、快速、优雅地管理这些容器,这就是 Kubernetes 项目的初衷。在 Google 和 Redhat 发布了 Kubernetes 之后,这个项目的发展速度非常之快。
  • 2015 年,CNCF 成立。
    • 由 Google、Redhat 以及微软等大型云计算厂商以及一些开源公司共同牵头成立了 CNCF 云原生基金会。CNCF 成立之初,就有 22 个创始会员,而且 Kubernetes 也成为了 CNCF 托管的第一个开源项目。
  • 2017 年,CNCF 达到 170 个成员和 14 个基金项目。
  • 2018 年,CNCF 成立三周年有了 195 个成员,19 个基金会项目和 11 个孵化项目,如此之快的发展速度在整个云计算领域都是非常罕见的。

云原生技术生态现状

因此,如今我们所讨论的云原生技术生态是一个庞大的技术集合。CNCF 有一张云原生全景图(https://github.com/cncf/landscape),在这个全景图里已经有 200 多个项目和产品了,这些项目和产品也都是和 CNCF 的观点所契合的。所以如果以这张全景图作为背景,加以思考就会发现,我们今天所讨论的云原生其实主要谈论了以下几点:

云原生基金会 —— CNCF

CNCF是目前云计算领域最成功的开源基金会之一,是 Kubernetes、 etcd、Envoy 等知名开源项目的托管基金会。

云原生技术社区

比如像 CNCF 目前正式托管的多个项目共同构成了现代云计算生态的基石,其中像 Kubernetes这样的项目已经成为了世界首屈一指,非常活跃的开源项目;目前从 CNCF 毕业的项目有很多,例如Kubernetes 、Prometheus、Envoy、CoreDNS、containerd、Fluentd 。

云原生服务架构的原则

高可用架构设计的原则

  • 可观测:可以通过运行状态和数据分析,实现可观测模式下的运行状态和运行数据分析。

  • 可灰度:可以实现蓝绿发布、AB测试、金丝雀发布机制等,实现数据服务的流量控制。

  • 可回滚:可以实现服务的fallback和reback回滚方式。

提高架构可用性的设计原则

  • 解耦:消息队列、分布式队列、服务拆分

  • 冗余:异地容灾、多点部署、主从切换

  • 异构:sidercar模式进行分析和实现

  • 异步:消息队列、异步调用、响应式编程

微服务设计原则

盗用官方图片一个:

原则一:完整性

功能完整性:功能内部逻辑独立,外部依赖较少。

微服务完整性:服务里面的每个微服务都应能独立完成具体的业务操作或者流程,都有明确的输入、输出和处理逻辑。

原则二:技术限制

需要使用事务一致性的功能需要放在一个微服务内,尽量避免分布式事务问题。

原则三:性能扩展

对于用户使用频率较高,性能要求较高的功能可单独作为一个微服务,以便做多节点扩展提升性能。

原则四:耦合性

微服务和微服务之间尽量避免相互调用依赖。可以通过 RPC 远程调用接口的方式,对于关联性较高的功能,应放在同一个微服务内。

公共使用的功能可设计在一个公共微服务。比如日志功能,文件上传功能以及一些底层技术组件等,可设计在一个微服务中。

【Quarkus技术系列】「云原生架构原理」在云原生时代下的Java“拯救者”是Quarkus,那云原生是什么呢?相关推荐

  1. 03 ElasticSearch笔记-搜索技术深入与集群架构原理

    回顾: 1.通过term 和 match查询数据时细节点以及数据类型keyword与text区别 1.1 term查询 1.1.1 term查询keyword字段. term不会分词.而keyword ...

  2. Serverless SSR 技术在「腾讯在线教育」的实践

    我们的团队 IMWeb 团队隶属腾讯公司,是国内最专业的前端团队之一. 我们专注前端领域多年,负责过 QQ 资料.QQ 注册.QQ 群等亿级业务. 目前聚焦于在线教育领域,精心打磨腾讯课堂.腾讯企鹅辅 ...

  3. 腾讯技术峰会:从模型部署到算法应用,云计算时代下的人工智能

    在飞速变化的时代,新的技术和产品层出不穷,云会议.云教学的出现敲开了新世界的大门,更改变了我们的工作和生活方式.沉淀新技术.开发最好的产品.助力开发者成长一直是腾讯持续关注的方向. 12月19日至20 ...

  4. 福利 | CarBlock 开启「区块链+车联网」数据应用新时代

    文章来源:链闻ChainNews 作者:链小算 区块链究竟能带来哪些变革? <纽约时报>在一篇广为流传的介绍区块链的文章中指出,「区块链是让互联网回归最本质意义的唯一希望」,因为去中心化区 ...

  5. 【Redis技术探索】「底层架构原理」帮你从底层彻底吃透AOF技术原理(入门第二步)

    AOF持久化方式 AOF持久化方式是将redis的操作日志以追加的方式写入磁盘文件中.AOF持久化是以日志的形式记录服务器所处理的每一个写.删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看 ...

  6. 淘宝技术沙龙「系统稳定性与性能」的笔记与思考

    转自 http://itzoo.info/?p=591 一 如何利用应用自己的数据来保证系统的稳定-淘宝小赌 总体感觉淘宝经过最近这几年双十一和双十二的洗礼,在流量的容量规划和控制方面做了很多工作: ...

  7. 「高可用架构设计」的入门秘籍

    前言 伴随着互联网的诞生和发展,高可用架构出现并不断完善.互联网早期许多系统只依赖于一台计算机来处理请求,所以经常出现「服务不可用」的情况.为了保持系统正常运行,出现将负载分配给能够满足需求的多台计算 ...

  8. 服务器后台设计与大型网站设计,「大型网站架构设计」—— 前言

    嘿,笔者的个人博客已经孵化完成啦

  9. 干货分享「UC3842内部工作原理」

    在高频开关电源中,常见的控制方式有电压控制,电流控制(电流控制又分为峰值电流控制和平均电流控制),移相控制.电压控制方式相对简单,容易理解,常见的电压控制芯片以TL494.SG3524等为代表,相对电 ...

最新文章

  1. js 强校验 弱校验_还在手写表单校验逻辑?试试spring validation吧
  2. 怎么查看mysql正在运行的语句_MySQL如何查询当前正在运行的SQL语句
  3. 《看聊天记录都学不会Python到游戏实战?太菜了吧》(10)无底洞的循环
  4. 图解自监督学习(CV)
  5. 安杰文高等计算机与生产技术学校,法国留学院校推荐:安杰文高等计算机与生产技术学校...
  6. 11.FreeRTOS学习笔记-内存管理
  7. 允许外部访问Windows本机的指定端口
  8. 走进“开源SDR实验室” 一起玩转4G/5G开源项目srsRAN(srsLTE升级版):安装方法+NB-IoT测试
  9. centos7搭建hexo+nods.j个人博客
  10. aquarius数据库建模配置详解
  11. 简述API HOOK技术及原理
  12. python填充图像为方形
  13. AWS的KVS相关介绍
  14. JAVA基础核心技术总结(2)--基本语法
  15. 程序员思维修炼读后感
  16. 手持多线激光三维重建
  17. iOS开发中,如何防止Crash(闪退,崩溃)?
  18. 应该担心什么不应该关心什么(做正确的事,把事情做对)
  19. 着色器实例 代码+注释 更新中【描边、卡通渲染、法线颜色、贴图动画等等】
  20. 两个电解电容反相串联作用和用途

热门文章

  1. com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立 安全连接
  2. ElasticSearch权限控制实战
  3. 无线网络技术Mesh解析及解决方案推荐
  4. 第2章 序列构成的数据
  5. 算法与数据结构实验题 8.21 森林冰火人
  6. DAY09_继承拼图游戏案例
  7. 机房收费管理系统(一)
  8. js 将标准时间转成 年月日时分秒格式
  9. Git与SVN的区别Git常用命令
  10. df 取某两列值不一致的行