首页 文章 精选 留言 我的

精选列表

搜索[k8s],共3945篇文章
优秀的个人博客,低调大师

Spring Boot 2.3 分层jar包、优雅停机、完美支持 Docker\k8s,一起尝鲜儿吧

我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。 Spring Boot 2.3 已经发布一个月了,这两天才想起来尝一尝鲜儿。除了常规的升级外,很大部分的升级是针对 Docker 的,让你不得不相信,Docker 容器化微服务已然大势所趋。还没有用过的同学,再不下手就晚了。 此次升级主要包括如下几个方面,接下来就跟着我一起来尝一尝吧。 准备工作 为了说明 Spring Boot 2.3 的新特性,必须创建一个项目,以便试验。 创建一个项目并启动 1、创建一个 Spring Boot 项目,可以到 https://start.spring.io/ 上创建,也可以使用 IDEA 自带的功能创建。选择版本 2.3.1,JDK 还是选择亲爱的 Java 8,引入 Web 和 Actuator 两个依赖包。 有一点要注意一下,在我写本文的时候,Spring Boot 2.3.1 还不能从中央仓库下载,需要添加 Spring Boot 官方的里程碑仓库。 <repositories> <repository> <id>spring-milestone</id> <name>Spring Milestone Repository</name> <url>https://repo.spring.io/milestone</url> </repository> </repositories> 2、在 pom 文件中引入 Maven 插件 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.3.1.RELEASE</version> </plugin> </plugins> </build> 3、添加一个 Controller,做测试用。 @RestController public class PlayController { @GetMapping(value = "play") public String play(){ return "hey, play with me!"; } } 4、启动项目 mvn spring-boot:run 5、访问 http://localhost:8080/play,说明项目启动成功 更好的 Docker 支持 如果不使用 Docker 呢,那就直接打成 jar 包,使用如下命令 mvn package spring-boot:repackage 然后就可以把这个 Jar包部署到服务器了,当然这个过程可能是用自动化部署工具实现的,不如 jenkins 或者自研系统。 之前 Docker 打包方式 抛开公司(尤其是大厂)里成熟的自动化部署流程不谈,我这里说的是一般性小厂或者是个人项目。 如果你在之前的版本就已经用 Docker 方式,那基本上都是自己写 Dockerfile ,然后自己写脚本使用 Dockerfile 打镜像包,或者使用 Maven 插件,比如 dockerfile-maven-plugin,我之前写过一篇 Spring Boot 和 Docker 实现微服务部署,就是用的这种方式,可以对比着看一下。 Cloud Native Buildpacks 如果你了解 Dockerfiles 的话,那你肯定了解用 Dockerfiles 构建镜像的过程,需要你创建一个 Dockerfile 文件然后在里面写上构建镜像所需的一系列动作,而 Cloud Native Buildpacks 则无需配置类似的过程文件,很大程度上减轻了开发者的工作,提高了效率。这还不是最重要的,最重要的是它提供了更高层次的抽象能力,使镜像的分层更加清晰,并且合理有效的利用层缓存,这样一来,当我们对应用程序进行修改之后,再次构建镜像时的速度飞快,比如我们的应用只改了几行代码,那当我们使用 Buildpacks 构建镜像时,只需要在应用程序层进行重新构建,其他层使用缓存就可以,也就是只对变化了的层重新构建。 Spring Boot 2.3 Docker 方式 首先要确保你本地已经正常启动了 Docker 服务。 Spring Boot 2.3 官方的 Docker Maven 插件,从此不用再借助第三方了。我们前面创建项目的时候已经引入了这个 Maven 插件。 此插件不仅提供了打镜像包的功能,还有其他的常用功能,比如 run、repackage 等。 为什么前面要说 Cloud Native Buildpacks 呢,不是跑题啊,是因为 Spring Boot 2.3 生成 Docker 镜像包的方式就是集成了 Cloud Native Buildpacks。 那我们就打个镜像包试一下吧 mvn spring-boot:build-image 你以为马上就能看到成果了吗,还是太年轻。 大中华区开发者怎么了 对于中国的开发者来说,打包这一步不会太顺利,原因大家都很清楚。不出意外的话,应该会出现这样的错误,不出错可能才是意外。 [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.3.1.RELEASE:build-image (default-cli) on project play: Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:2.3.1.RELEASE:build-image failed: Docker API call to 'localhost/v1.24/images/create?fromImage=gcr.io%2Fpaketo-buildpacks%2Fbuilder%3Abase-platform-api-0.3' failed with status code 500 "Internal Server Error" and message "Get https://gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)" -> [Help 1] 出现这个问题的原因是因为 Buildpacks 调用 Docker API 创建镜像的方法,要访问 https://gcr.io ,从上面 pull 一些基础镜像下来,这是 Google 的 Google Cloud ,是 Google 的容器仓库,然而对于中国的开发者来说,这个地址是 404 的。 所以我们要加个系统级别代理,或者专门为 Docker 配置代理。我是在 Docker 中配置的代理,系统代理的影响太大。我本机安装的是 Docker Desktop,直接打开设置,在里面加上代理就可以了(别问我代理怎么搞,问我就是没有代理)。 好了,通过上面一顿猛如虎的操作,再次运行命令 mvn spring-boot:build-image 根据你的网速,等上一段时间,就会出现下面的结果,说明镜像创建成功了。 之后你可以使用 docker images命令查看。这时间也是醉了,40 years ago。 使用此镜像启动容器 使用命令直接启动容器。 docker run -it -p8080:8080 play:0.0.1-SNAPSHOT 然后访问 8080 端口,得到正确的返回结果,说明启动成功了。 Docker Image 的一个特点是,每个层都是前一层变化的增量。有一个工具叫做 dive,可以清楚的查看分层结构里面包含的内容。具体安装和使用请自行搜索。 使用 dive 查看的一个小技巧,因为镜像层包含的指令很多,所以我们选择只查看相对于上一层的增量内容,使用 Ctrl+L组合键。 然后按 Tab进入视图,然后按 Ctrl+U,去掉没有更改的选项,也就是只看变化的部分。 然后上下箭头可以切换层查看,比如下面这个图展示了一个 18 M 的层相对于上一层的变化内容,可以看出来这个层实际上就是应用程序层,包含了很多当前应用程序的类和第三方依赖包等。 分层 jar 包 分层打包配置很方便,最简单的方式就是在 pom 文件中加上如下配置: <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.3.1.RELEASE</version> <configuration> <layers> <enabled>true</enabled> </layers> </configuration> </plugin> 加上分层配置之后,仍然使用常规的命令打包 mvn package spring-boot:repackage 分层打包其实和以前的打包方式没有什么不同,打出来的包几乎和之前是完全一样的,分层其实只是逻辑上的抽象而已。打出的 jar 包结构如下(jar包其实就是个压缩包,可以解压缩查看目录结构) 在 jar 包的 BOOT-INF 目录下可以看到 classpath.idx和layers.idx两个文件,这两个就是为了分层 jar 的关键。 默认情况下会分成如下四个层。 dependencies 对版本没有要求的依赖包,也就是你的应用程序无论怎么改,都几乎不会影响的依赖包。 spring-boot-loader Spring Boot 加载类。 snapshot-dependencies对应用版本有要求的依赖包,比如应用升级后,可能同时需要升级的依赖包。 application 应用程序编译类和配置文件等。 在 layers.idx可以看出这个分层结构,用普通的文本编辑器就可以打开,比如 sublime。打开之后看到这样一个类似于 yaml 的结构,四个层以及他们所指的目录都清晰的列出来了。 - "dependencies": - "BOOT-INF/lib/" - "spring-boot-loader": - "org/" - "snapshot-dependencies": - "application": - "BOOT-INF/classes/" - "BOOT-INF/classpath.idx" - "BOOT-INF/layers.idx" - "META-INF/" classpath.idx文件列出了依赖的 jar 包列表,到时候会按照这个顺序载入。 - "spring-boot-starter-actuator-2.3.1.RELEASE.jar" - "spring-boot-starter-2.3.1.RELEASE.jar" - "spring-boot-2.3.1.RELEASE.jar" - "spring-boot-autoconfigure-2.3.1.RELEASE.jar" - "spring-boot-starter-logging-2.3.1.RELEASE.jar" - "logback-classic-1.2.3.jar" - "logback-core-1.2.3.jar" - "log4j-to-slf4j-2.13.3.jar" 自定义分层结构 如果我们想要在默认的 4 层上增加新的分层,Spring Boot 2.3 也提供了定制分层的功能。配置也很简单,在 plugin配置如下,指定了 layers.xml作为自定义分层配置 <configuration> <layers> <enabled>true</enabled> <configuration>${project.basedir}/src/layers.xml</configuration> </layers> </configuration> layers.xml的配置像下面这样 <layers xmlns="http://www.springframework.org/schema/boot/layers" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/boot/layers https://www.springframework.org/schema/boot/layers/layers-2.3.xsd"> <application> <into layer="spring-boot-loader"> <include>org/springframework/boot/loader/**</include> </into> <into layer="application" /> </application> <dependencies> <into layer="snapshot-dependencies"> <include>*:*:*SNAPSHOT</include> </into> <into layer="dependencies" /> </dependencies> <layerOrder> <layer>dependencies</layer> <layer>spring-boot-loader</layer> <layer>snapshot-dependencies</layer> <layer>application</layer> </layerOrder> </layers> 当你开启分层功能后,可以使用 -Djarmode查看分层情况。 java -Djarmode=layertools -jar target/play-0.0.1-SNAPSHOT.jar list 显示的结果就是分层情况,比如默认情况下就是这样,列出了 4 个默认分层。 dependencies spring-boot-loader snapshot-dependencies application 题外话: Djarmode其实就是个 Java-Agent,关于Java-Agent,可以看我之前写的一篇文章,Java 调试工具、热部署、JVM 监控工具都用到了它,挺有意思的。 分层包的意义 说了半天分层包了,那分层包到底有啥用呢? 这么说吧,它其实是为了和 Docker 配合使用的,如果你不用 Docker 方式部署,还是用原始 jar 包的方式,可以说没什么用,如果非得说有什么用,那就是让你更加清楚项目的依赖情况。 分层包 和 Docker 结合 前面介绍 Docker 镜像包的时候说了 Buildpacks 可以让你的镜像分层清晰,而 Spring Boot 2.3 提供的分层 jar 功能可以在镜像分层的基础上更上一层楼,使分层更加清晰。 那我们开启分层配置,然后重新打个 Docker 镜像出来看一看。 mvn spring-boot:build-image 然后再使用 dive 工具看一下启用分层 jar 功能后的 Docker 镜像分层情况,是不是变得更好了。前面的层都是一样的,都是一些集成镜像和配置,从 18 MB 的这个层开始的 4 个层就是启用分层后的4个层,分别对应 dependencies、spring-boot-loader、snapshot-dependencies、application 比如这个 5.4K 的 application 层。 那这样做有什么好处呢,前面不是说了吗,Buildpacks 打镜像包会使用缓存的,如果这一层没变那就不用重新打这一层,只需要重新打包修改过的层,这样一来,如果你只修改了 application 中的内容,比如新加了 Controller 或者配置文件等,那么只需要重新打包这一层,也就是几 K,几十K 不会很大,这样一来打包速度就很快了,要不然一个上百兆的镜像包也得需要一段时间。 优雅停机功能 什么叫优雅停机呢,假设这是一个分布式服务,其中一台服务所在的实体机需要打安全补丁,需要关机重启,那实体机关机之前要先把这个服务停掉。 关掉服务的方式,比如: 我不管,我就直接关实体机,至于服务,你命由我不由天。 也好办,kill -9 ,一行命令解决,也挺省心。 额,还行吧,但是有点儿问题,比如当前服务实例正在处理请求,还没处理完,你咔嚓一下就给它结束了,谁受得了,不要太刺激。 我们把前面的那个 Controller 中的 play方法改一下,加一个延时,等待 6 秒才返回,模拟一个比较慢的请求。 @GetMapping(value = "play") public String play() throws InterruptedException{ Thread.sleep(6000); return "hey, play with me!"; } 效果就是你访问这个地址,然后等了 6 秒之后才显示出 hey, play with me!。 如果在这 6 秒钟之内我杀掉了进程,将会在浏览器中出现下面这个讨厌的界面。 启用优雅关机 只需要在配置文件中增加 server.shutdown的配置,一种是 immediate,也就是立即停止,另一种就是所谓的优雅关机 graceful。 server: port: 8081 shutdown: graceful # 缓冲10s,上面定义的那个方法延时 6秒,所以10秒肯定够了 spring: lifecycle: timeout-per-shutdown-phase: 10s 之后,再启动服务,然后访问这个页面,这个过程中结束进程。然后会看到控制台有输出,提示优雅关机的过程,并提示说会等待活动状态的请求处理完成。 请求也变得正常了。 活动状态检测 之前版本的 spring-boot-starter-actuator就已经有健康状态检测了,不开启活性状态检测,当我们访问 health 的时候,会看到下面的信息,说明服务是可用的。 通过在配置文件中配置如下信息,可开启活动状态检测。 management: health: probes: enabled: true endpoint: health: show-details: always 开启上述配置之后,重启服务,在访问 health 页面,看到的内容如下 除了状态标示外,还多了一个 groups节点。 Liveness:应用程序是否处于可用状态 可通过 /actuator/health/liveness 路径查看 Readiness:应用程序是否准备好接受客户端请求了。 可通过 /actuator/health/readiness路径查看 这个功能其实是针对部署在 Kubernetes 上的服务做的支持。Kubernetes 提供了 LivenessProbe 和 cProbe 两类探针,活动状态检查便是对这两类探针提供无缝支持。 在配置文件中增加配置即可,与 kubernetes 做无缝对接。 spring: main: cloud-platform: kubernetes 那应该怎么用呢 拿 Readiness 来说吧,假设我们要对外宣布次服务暂时不接受请求,那就改变 readiness 的状态,当探针过来的时候发现不接受请求,那就去请求其他实例了。 具体怎么做呢,我在 Controller 中加了两个方法,一个开启接受请求,一个停止接收请求。 @RestController public class PlayController { private final ApplicationEventPublisher publisher; public PlayController(ApplicationEventPublisher publisher) { this.publisher = publisher; } @GetMapping(value = "play") public String play() throws InterruptedException{ Thread.sleep(6000); return "hey, play with me!"; } @GetMapping(value = "up") public String up(){ AvailabilityChangeEvent.publish(publisher,this, ReadinessState.ACCEPTING_TRAFFIC); return "up"; } @GetMapping(value = "down") public String down(){ AvailabilityChangeEvent.publish(publisher,this, ReadinessState.REFUSING_TRAFFIC); return "down"; } } 通过 AvailabilityChangeEvent这个类的 publish 方法,更改自身服务状态。当我们访问 down 接口之后,再次查看 health/readiness的状态情况,会显示如下内容: OUT_OF_SERVICE表示离线,不接受请求。 而当我们请求 up 接口后,服务状态又变成了 up,这也就实现了服务下线和上线的功能。 支持 JDK 14 Spring Boot 2.3 支持 JDK 14了,但跟我有啥关系吗,没有。我依然用我的 Java 8。真香。 Spring Data Neumann Spring Boot 2.3发布了 Spring Data Neumann,其中包含许多主要版本和驱动程序升级。此版本还增加了对 R2DBC(Reactive Relational Database Connectivity) 的稳定版本支持。R2DBC 提供了异步编程方式访问数据库的 API,主要是配合开发异步非阻塞式的应用程序使用的。 总结 从中可以看出很大部分内容都是与 Docker 容器技术有关的,比如分层打镜像包、无缝支持 kubernetes 等,可见 docker 微服务已然成为很多开发者的选择。但是仍然有待改进,比如默认的 docker hub 是 Google Cloud,就不能灵活配置,支持国内的镜像仓库不好吗。 你们用的 Spring Boot 哪个版本,会来尝个鲜儿吗? 参考文档: https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/maven-plugin/reference/html/index.html#goals https://medium.com/@TimvanBaarsen/whats-new-in-spring-boot-2-3-22d01d036f11 壮士且慢,先给点个赞吧,总是被白嫖,身体吃不消! 我是风筝,公众号「古时的风筝」。一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农!你可选择现在就关注我,或者看看历史文章再关注也不迟。

优秀的个人博客,低调大师

Service Mesh、K8S、海量数据一致等,六大热点技术邀你来聊

小蚂蚁说: 云原生(Cloud-Native)到底是什么?这个问题一直很难定义。CNCF技术监督委员会最近通过投票确定了其官方定义。如何使其弹性可扩展、稳定高可用、敏捷易维护等特性应用到现有创新场景? 蚂蚁金服将在7月6日与ArchSummit深圳合作举办云原生架构探讨晚场技术交流活动,邀请微服务、中间件、应用开发架构、分布式事务解决方案等技术专家,共同讨论云原生、容器、微服务、海量数据访问等话题。 前言 欢迎大家加入ArchSummit深圳,同众多社区专家以及蚂蚁金服的技术团队一起作探讨和共创,我们希望通过强交流的方式来引发更深层的技术和行业思考,非常期待您与我们现场探讨,下图是活动嘉宾介绍: 现场切磋与线上探讨皆可参与,如果无法来现场请添加蚂蚁金服官方小助手微信号:Ant-Techfin01,回复“云原生架构”,小助手会把你拉入交流群,

优秀的个人博客,低调大师

k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)

命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectlrunnginx-deployment--image=nginx:1.7.9--replicas=2 在命令行中通过参数指定资源的属性。 2. 通过配置文件和kubectl apply创建,要完成前面同样的工作,可执行命令: kubectlapply-fnginx.yml nginx.yml 的内容为: 资源的属性写在配置文件中,文件格式为 YAML。 下面对这两种方式进行比较。 基于命令的方式: 简单直观快捷,上手快。 适合临时测试或实验。 基于配置文件的方式: 配置文件描述了What,即应用最终要达到的状态。 配置文件提供了创建资源的模板,能够重复部署。 可以像管理代码一样管理部署。 适合正式的、跨环境的、规模化部署。 这种方式要求熟悉配置文件的语法,有一定难度。 后面我们都将采用配置文件的方式,大家需要尽快熟悉和掌握。 kubectl apply不但能够创建 Kubernetes 资源,也能对资源进行更新,非常方便。不过 Kubernets 还提供了几个类似的命令,例如kubectl create、kubectl replace、kubectl edit和kubectl patch。 为避免造成不必要的困扰,我们会尽量只使用kubectl apply, 此命令已经能够应对超过 90% 的场景,事半功倍。 下节我们来分析一个 Deployment 的配置文件。 书籍: 1.《每天5分钟玩转Docker容器技术》https://item.jd.com/16936307278.html2.《每天5分钟玩转OpenStack》https://item.jd.com/12086376.html 本文转自CloudMan6 51CTO博客,原文链接:http://blog.51cto.com/cloudman/2065285

优秀的个人博客,低调大师

k8s 运行一次性任务 - 每天5分钟玩转 Docker 容器技术(132)

容器按照持续运行的时间可分为两类:服务类容器和工作类容器。 服务类容器通常持续提供服务,需要一直运行,比如 http server,daemon 等。工作类容器则是一次性任务,比如批处理程序,完成后容器就退出。 Kubernetes 的 Deployment、ReplicaSet 和 DaemonSet 都用于管理服务类容器;对于工作类容器,我们用 Job。 先看一个简单的 Job 配置文件 myjob.yml: ①batch/v1是当前 Job 的apiVersion。 ② 指明当前资源的类型为Job。 ③restartPolicy指定什么情况下需要重启容器。对于 Job,只能设置为Never或者OnFailure。对于其他 controller(比如 Deployment)可以设置为Always。 通过kubectl apply -f myjob.yml启动 Job。 kubectl get job查看 Job 的状态: DESIRED和SUCCESSFUL都为1,表示按照预期启动了一个 Pod,并且已经成功执行。kubectl get pod查看 Pod 的状态: 因为 Pod 执行完毕后容器已经退出,需要用--show-all才能查看Completed状态的 Pod。 kubectl logs可以查看 Pod 的标准输出: 以上是 Pod 成功执行的情况,如果 Pod 失败了会怎么样呢?我们下一节讨论。 书籍: 1.《每天5分钟玩转Docker容器技术》https://item.jd.com/16936307278.html2.《每天5分钟玩转OpenStack》https://item.jd.com/12086376.html

优秀的个人博客,低调大师

K8s 集群节点在线率达到 99.9% 以上,扩容效率提升 50%,我们做了这 3 个深度改造

点击下载《不一样的 双11 技术:阿里巴巴经济体云原生实践》 本文节选自《不一样的 双11 技术:阿里巴巴经济体云原生实践》一书,点击上方图片即可下载! 作者 | 张振(守辰)阿里云云原生应用平台高级技术专家 导读:2019 年阿里巴巴核心系统 100% 以云原生方式上云,完美地支撑了 双11 大促。这次上云的姿势很不一般,不仅是拥抱了 Kubernetes,而且还以拥抱 Kubernetes 为契机进行了一系列对运维体系的深度改造。 Kubernetes作为云原生的最佳实践,已经成为了事实上的容器编排引擎标准,Kubernetes 在阿里巴巴集团落地主要经历了四个阶段: 研发和探索:2017 年下半年阿里巴巴集团开始尝试使用Kubernetes api 来改造内部自研平台,并开始了对应用交付链路的改造,以适配Kubernetes; 初

优秀的个人博客,低调大师

K8s弃用Docker | 被Linus关注获10万股期权 | Win10+Android | Element基于Vue 3重构

回顾一周社区热门资讯 第【九十一】期:20201128-20201204 JavaScript 诞生 25 周年 1995年 12 月 4 日,Netscape 和 Sun Microsystems 宣布推出 JavaScript。在尝试制作动态网页时,Netscape 公司的 Brendan Eich 开始研究一种新的脚本语言。该语言的第一个版本在十天之内就被开发出来,并命名“Mocha”,之后更名为 LiveScript,最后改为 JavaScript。 中国“量子霸权”成果:比最快超级计算机快一百万亿倍 这数字什么概念。 Fedora 希望提供独立的 XWayland 软件包 虽然 X.Org Server 已被认为是事实上的“废弃软件”,但其上游的 XWayland 部分代码库仍处于维护状态。 GitHub Octoverse 报告:TypeScript 超越 C#、PHP 和 C++ 对开源项目的贡献中,尼日利亚继续名列前茅,其次是中国香港、沙特阿拉伯和孟加拉国。美国对项目的贡献和活跃用户数量仍然高于世界上任何其他地区,但今年美国对项目的贡献下降到 22.7%。 Jetpack Compose for Desktop 添加 Swing 互操作层和 Apple Silicon 支持 这是软件开发厂商 JetBrains推出的一个 Kotlin 桌面 UI 框架,采用声明式和响应式的方法构建 UI。简化并加快了桌面应用程序的 UI 开发,允许 Android 和桌面应用程序之间的 UI 代码共享。 Kubernetes 将弃用 Docker Docker 作为一个完整的容器技术堆栈,在其创建之初就不是为了将其嵌入 Kubernetes 而设计的。除了其作为容器运行时本身的作用以外,Docker 还包含了一系列方便用户交互的 UX 更改,而这些额外的功能对于 Kubernetes 来说过于臃肿。 SUSE 完成收购 Rancher SUSE创办于 1992 年,是全球首家企业级开源 Linux 操作系统供应商。1994 年,他们首次推出了 SLS/Slackware 的安装光碟,命名为 S.u.S.E. Linux 1.0 。其后综合了 Florian La Roche 的 Jurix distribution(也是一个基于 Slackware 的发行版),于 1996 年推出一个完全自家打造的发行版 S.u.S.E. Linux 4.2。SUSE 曾多次易主,并于 2019 年 3 月重回独立,成为全球最大的独立开源公司。 TVM 成 ASF 顶级项目,多个大厂使用的深度学习硬件编译器堆栈 TVM 可用于 CPU、GPU和专门的加速器,也是 ASF 首个全栈软件和硬件协同优化的项目。TVM 使机器学习开发人员能够在任何硬件后端有效地优化和运行计算。该项目始于 2017 年,是华盛顿大学的一个研究项目,2019 年 3 月进入 Apache 孵化器。 Rust 语言风靡学术界 pip 20.3 发布:更改默认依赖解析器、即将停止支持Python 2.7 这是一个重要且具有破坏性的版本,原因在于使用了新的默认依赖解析器。 JDK/Java 16 可能带来什么新特性? Docker 恶意软件泛滥,开发人员需谨慎 360 发现了一个用 Go 语言编写的恶意后门程序,利用了 Docker Remote API 中未经授权的访问漏洞。 国外开发者众筹为 Mac 新机移植 Linux 系统 这一开发者十分擅长对硬件设备进行逆向编码工作,自 2000 年以来,他就一直致力于为各种设备移植 Linux 系统,提供非官方的开源支持。Marcan 曾经在任天堂Wii、索尼 PS 系列游戏主机等设备上移植 Linux 系统,并确保 Linux 在这些设备上能正常工作。他最近的一次尝试是在索尼 PS4 上成功移植了 Linux,并使其能够运行 OpenGL/Vulkan 支持的 Steam 游戏。 酷派员工积极提交补丁获 Linus 关注,并收到公司10万股期权奖励 补丁通过社区 SME 审核后,Linus Torvalds 亲自向虎跃了解其个人及酷派公司的状况。 OpenZFS 2.0.0 正式发布 从最初的 ZFS On Linux 演变成如今统一支持 FreeBSD 和 Linux 的 OpenZFS(对macOS 的支持工作仍在进行中)。除此之外,OpenZFS 2.0.0 也带来了许多新功能。 CopyCat 增加对 Swift、Python、C++ 语言的支持 检查别人的项目抄袭了你多少代码。 树莓派4散热风扇发布,售价 5 美元 DataGear 2.0.0 发布,数据可视化分析平台 取代谷歌 reCAPTCHA,hCaptcha 成最大独立验证码服务 Zig 0.7.0 发布,想要替代 C 的编程语言 0.7.0 的主要目标是进一步提升语言稳定性、创建语言规范的初稿以及自托管编译器。尤其是自托管编译器,因为 0.8.0 版本要实现的一项重要功能是内置软件包管理器,而包管理器依赖于自托管编译器。 Element 仍在维护,官方发布适配 Vue 3.0 的 Element Plus Element Plus 是首个使用 TypeScript + Vue 3.0 Composition API 重构的组件库。由于 Vue 3.0 进行了大版本升级,Element 作为其生态的组件库希望借此机会丢掉历史包袱,所以开发团队对 Element 进行了一次深度重构。 微软正在为 Windows 10 开发 Android 子系统 微软正在打造的解决方案允许 Android 开发者将其应用打包为 MSIX 格式并提交到 Microsoft Store,从而实现无需更改 Android 应用代码即可将其引入 Windows 10。熟悉此事的消息人士透露给Windows Central 称,此项目代号为"Latte",最早或在明年上线。 OpenOffice 月均下载量仍超 150 万,为何不更新? OpenOffice 自 2014 年以来未再进行任何重大更新。 特斯拉重大安全漏洞:一台树莓派即可开走 Model X 只需要接近一名特斯拉 Model X 的车主(距离 15 米以内即可),然后用自己在网上购买的车身控制模块(BCM)唤醒车主智能钥匙的蓝牙,再从目标汽车的挡风玻璃上读取车辆识别号的最后五位数字,便可以为他们的盗版 BCM 创建一个代码,用于证明其身份。轻而易举地获得一套克隆 BCM 后,即可唤醒复制的车钥匙。 2019 年 CNCF 中国云原生调查:Kubernetes 应用率达 72% CNCF 现在在中国有近 50 个成员。中国还是 CNCF 项目的第三大贡献者(按贡献者和提交者计),仅次于美国和德国。 往期:一周热点

优秀的个人博客,低调大师

云原生周报 | 云原生顶级技术省会即将上线;K8S Deployment 故障排查可视化指南中文版来了

业界要闻 1.云原生顶级技术盛会即将上线,主题演讲 + 项目亮点都在这了! 摘要: 2021 年 12 月 9 日 - 10 日,由 CNCF 与全球开源贡献者共同发起的 “KubeCon + CloudNativeCon + Open Source Summit China 2021” 将以虚拟会议的形式与云原生爱好者们见面。在今年的主题演讲中,将有近 20 位来自 CNCF 与各大厂商的资深云原生技术专家带来精彩的分享,其中既有关于 CNCF 和 Kubernetes 的演讲主题,也有关于金融云原生、多集群管理、安全、云未来等行业前沿领域的技术探索。 云原生最佳实践 1.使用 Service 实现简单的灰度发布和蓝绿发布 摘要: 原理主要涉及用户通常使用无状态负载 Deployment、有状态负载 StatefulSet 等 Kubernetes 对象来部署业务,每个工作负载管理一组 Pod。通常还会为每个工作负载创建对应的 Service,Service 使用 selector 来匹配后的 Pod,其他服务或者集群外部通过访问 Service 即可访问到后端 Pod 提供的服务。 2.gRPC 错误处理实践 摘要: 需要要求所有服务提供者提前在独立的路径下定义好接口和错误码的 protobuf 文件,然后提交到 GitLab,通过 GitLab CI 的 check 阶段对变更的 protobuf 文件做 format、lint、breaking 检查。然后在 build 阶段,会基于 protobuf 文件中的注释自动产生文档,并推送至内部的微服务管理系统接口平台中,还会根据 protobuf 文件自动构建 Go/PHP/Node/Java 等多种语言的桩代码和错误码,并推送到指定对应的中心化仓库。 3.作业帮云原生成本优化实践 摘要: 随着业务需求的发展,作业帮的 IT 系统面临巨大挑战,现有基础平台架构已经无法满足快速增长的业务需求。使用了 HPA 和在离线混合部署后,作业帮业务的快速迭代,秒级急速扩缩容,服务运行态规范落地和统一的运维环境,多云的环境统一,提升服务可用性。 推荐阅读 1.都 2021 年了,对于服务网格,社区到底在讨论什么? 摘要: 本文提到了从容器编排争霸到服务网格,可以看到云原生乃至整个云计算就是标准之争;服务网格的目标是成为云原生的网络基础设施,任重而道远;服务网格只是云原生庞大技术栈中的一环,不要一叶障目,技术的发展是永无止境的;Istio 架构已经稳定,生产可用,生态正处于萌芽中;对于终端用户来说适合自己的才是最好的。 2.Kubernetes Deployment 的故障排查可视化指南 (2021 中文版) 摘要: 将应用部署到 Kubernetes 时通常会使用 Deployment、Service、Ingress,整个应用从部署到正常运行,经历的流程很长。从 kubectl apply YAML 文件,经过 apiserver、controller manager、scheduler、kubelet、以及 CRI、CNI 等众多组件的协同工作,本文给到了关于 Deployment 故障排查的视图。 3.基于 gRPC 和 Istio 的无 Sidecar 代理的服务网格 摘要: Istio 1.11 版本中支持的实验特性,可以直接将 gRPC 服务添加到 Istio 中,而不需要再向 Pod 中注入 Envoy 代理。本文中还给出了一个 Demo 性能测试数据,这种做法可以极大的提升应用性能,降低网络延迟。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册