暂时未有相关云产品技术能力~
暂无个人介绍
如今,Redis 已经成为互联网行业最流行的缓存解决方案之一。尽管(关系型)数据库系统 (SQL) 带来了许多出色的属性,例如 ACID,但为了保持这些属性,数据库的性能在“ 3 高” 条件环境下下往往显得捉襟见肘、苍白无力。
当我们开始学习 Kubernetes 时,我们并不完全清楚每个 Pod 是如何分配 IP 地址以及微服务容器化后是如何正常工作。或许,我们可能或多或少了解各个组件的概念以及它们是如何独立工作。但是,在特定的环境下可能不清楚这些组件是如何关联起来。
随着容器技术的井喷式发展及落地,通常情况下,我们将 Kubernetes 描述为“将 Linux 容器集群作为单个系统进行管理,以加速开发并简化维护”。与此同时,企业应用服务进行容器化改造时避免不了学习和使用 Kubernetes 。然而能够在环境中完整部署一整套多节点的 Kubernetes 集群,对于刚接触这块体系的 Devops 人员来说确实有一定的难度... ...
在实际的项目开发过程中,许多业务场景都使用基于 Redis 进行分布式锁的实现,但其中一些场景的实现过程中往往并没有充分考虑到分布式环境中可能出现的各种陷阱问题 ~
通常,在某些情况下,我们需要通用的方法去使用 Kubernetes 资源对象,而不是编写代码来处理特定类型。
设想一下,在我们的日常项目开发过程中,存在一个应用服务,其使用一些基础库函数并具有某些依赖项。如果我们在不支持这些依赖项的环境平台上运行此应用程序,那么,我们可能会遇到意外错误。随着 DevOps 及云原生理念的注入,我们希望我们所开发的应用程序能够可以跨多个操作系统及平台正常运行。
如果运行云原生工作负载均衡设施,则可以更好地保护我们的服务。毕竟,服务经常向公众暴露以及工作负载可能属于不同的租户。在这篇博文中,我将向大家展示访问我们的 Kubernetes 集群的攻击者如何进行容器逃逸:运行 Pod 以获得 root 权限,将 Pod 转义到主机上,并通过不可见的 Pod 和无文件执行来持续攻击。同时,我将向大家展示如何基于 Isovalent Cilium Enterprise 进行攻击检测。
像 Istio 这样的服务网格项目为我们的架构引入了许多功能和优势,包括更安全地管理集群微服务之间的流量、服务发现、请求路由以及服务之间的可靠通信。
在之前的文章中,我们简单介绍了关于 Traefik 的相关概念及组件原理机制,具体可参考:为什么选择 Traefik Ingress ?
如今,一种最为流行的架构设计模式便是将应用程序单体分解为更小的微服务。然后,每个微服务负责应用程序的特定方面或功能。例如,一个微服务可能负责提供外部 API 请求,而另一个可能处理前端的数据获取。
在日常的项目开发过程中时,我们时常会面临服务变更的挑战,为不影响用户体验,我们往往尽可能需要规避服务不可用风险。因此,持续交付便应运而生,其被接受为一种企业软件实践,并且是完善的持续集成原则的自然演变。然而,持续部署仍然非常罕见,这可能是由于管理的复杂性以及担心部署失败会影响系统可用性。在整个持续交付体系中,金丝雀发布,或许是最为经典的一个场景,基于此,我们能够很快发现不健康和“有问题”的服务,并且可以毫不费力地回滚到上一个的版本。
在日常的 Java 虚拟机进行监控的时候,我们往往会观测到各种各样的图形,无论是基于 JDK 自带的 Jconsole、Jvisualvm、JMC 还是第三方工具或插件,例如,Jprofile 、GCeasy 等。基于对垃圾收集模式的监测,我们可以实时观摩应用程序的健康状态和性能特征,以方便为后续的性能调优提供数据参考。
何为 Traefik Ingress ? 在解析此概念之前,我们回顾下 Kubernetes 生态组件 Ingress Controller (中文释义:入口控制器)的概念。
CoreDNS 是一个 DNS 服务器。基于 Go 语言开发。由于其灵活性,可以在多种不同的环境中使用。CoreDNS 已在 Apache 2 许可证版本获得许可,并且完全开源。其已成为 Kubernetes 1.13+ 以后版本的默认 DNS 服务。如今,当我们使用托管 Kubernetes 集群或为应用程序工作负载自行管理集群时,通常只需要关注应用程序本身,而无须过多关注 Kubernetes 提供的服务或如何利用它们。DNS 解析是任何应用程序的基本要求,因此我们需要确保它正常工作。
作为分布式缓存系统之一,Redis 应用场景较为广泛,落地于不同的行业领域以及业务场景,因此,在整个架构拓扑中起着重要的作用。
众所周知,Traefik 是云原生生态中的一个爆款的反向代理和负载均衡器。我们无论如何定义、赞美它都不为过。毫无疑问,基于传统的反向代理组件而言,真正使 Traefik 与 Nginx,Haproxy 最为关键的不同之处在于其“开箱即用”的功能,即它的自适应和动态可配置性。不仅如此,相比较而言,Traefik 最为核心的部分可能是它做自动服务发现、灰度发布等能力。
Kubernetes,通常我们将其缩写为 “K8s”,是一个开源的容器编排平台,最初在 Shipyard 平台中广泛使用。其基于自动化模式维护容器化的应用程序所涉及的许多任务,例如部署、扩展、负载平衡、灰度以及资源弹性伸缩等。
在之前的文章,我们介绍了有关 Service Mesh (服务网格)微服务生态体系中的 2个核心成员 Linkerd 和 Istio ,具体可参考相关链接:微服务之 Service Mesh浅析 以及 Service Mesh 体系解析。对于2者,其都是围绕“ Control Plane (控制平面)” 和“ Date Plane (数据平面)” 展开。
随着微服务生态的盛行,在基于不同的业务场景中,一个简单的请求往往可能会涉及到多个不同服务类型,此时,若某个服务所提供的业务出现异常,从而可能会导致整个业务处理链路中的问题跟踪、定位及其分析较为困难,服务之间的依赖梳理、组件排查就变得尤为复杂。
这个世界每天都在发生新的变化,无论你是否觉察到,它总是无声无息的发生着。技术生态也是一样,就像光阴,不会因为我们而驻留,从早期的 Cloud/Virtualization、IaaS、PaaS、CaaS 以及到当前比较火热的 Serverless ,无一不是基于业务发展的需要。
基于解决不同行业、业务应用的可扩展性、可用性等一系列问题,由此而生的微服务架构得到了各大厂商的、组织以及个人的青睐,随之而来便广泛应用于各种行业场景应用中。然而,随着时间的推移,越来越多的问题慢慢地呈现在大众的视野中。
众所周知,Apache Kafka 是一个分布式开源流和事件处理平台,广泛应用于各大互联网公司以及基于不同体系的软件架构的业务场景中。其实,基于早期的设计理念而言,Kafka 最初被设想为消息队列,并基于分布式提交日志的抽象。然而,自 2011 年由 LinkedIn 创建并开源以来,Kafka 已迅速从消息队列演变为成熟的事件流处理平台。
了解 GC Log (垃圾收集日志)并不是一件容易的事情,至少对于大多数技术人员而已。毕竟,对于这玩意,需要我们能够深入地了解 Java 虚拟机的工作原理以及对应用程序的内存使用情况的理解。在此篇文章中,我们将跳过应用程序的分析,因为它与应用程序的应用程序不同,并且需要对代码的知识。我们将讨论的是可以借助哪些工具使得我们能够读取和分析从 JVM 中获取的垃圾收集日志,以便正确定位问题。
今天因技术群里的小伙伴们在请教关于 Spring Boot 微服务应用启动成功后自动退出问题,故特此顺便整理下,以供大家在实际的业务场景中能够有所借鉴及参考。
话说,作为一款开源的边缘路由器,Traefik 或多或少算是一款比较牛逼的新生代组件,其不仅可以作为接入层组件,实现流量转发等相关功能,同时也可以支撑网关层的相关功能,尤其是 2.x 版本中的自定义中间件功能。
在整个容器生态体系开发活动过程中,Image (镜像)的编排显得愈来愈重要,毕竟,Image 是整个容器的灵魂,而镜像则通常是基于 Dockerfile 进行编排生成,故了解以及学习如何通过在镜像构建过程中应用一组快速的 Dockerfile 最佳实践来预防安全问题并优化容器化应用程序是一项必备的技能。
通常,在生产环境中,我们需要借助 GC Log 来实时检测我们的微服务基于 Java 虚拟机层面活动状态,涉及年轻代、年老代以及全局的垃圾回收 ,只有基于上述方案,我们才能够快速的定位、分析微服务在某一时刻、时间段所呈现的活动轨迹及事件,以便高效解决业务问题。此篇文章来自笔者早期博客,依据实际的项目场景进行总结整理的。因技术群里有朋友在问此方面领域的问题,故再次将其呈现出来。
当下,基于“微服务”的技术架构体系几乎主宰了整个业务市场,尤其是在云原生生态的拥抱下。无论是基于传统虚拟机生态还是云原生容器生态的现代微服务体系结构中,我们可以根据微服务的交互及通信风格将其划分为两大类:面向外部的微服务和面向内部的微服务。
想象一下,假设亚马逊每年只有一天不可用。按照这个数值估算,他们的业务将会约有 99.7% 的可用性,从表面上看这是相当合理的。然而,在过去的 2020 年,亚马逊的收入接近 4000 亿美元。基于 99.7% 而不是 100% 的可用性将花费亚马逊超过 10 亿美元。哪怕停机时间只是那么一点点,也会让公司的业务损失惨重。
当我们将 JVM 生态中的关键要素,例如,垃圾收集器、堆大小和运行时编译器设置默认值时,许多技术人员(开发、运维人员)或许应该意识到在 Linux 容器生态中(诸如,Docker、Rkt、RunC、Lxcfs 等)内所运行的 Java 进程的实际行为与预期不符。当我们在没有任何调优参数(例如,最为简洁的的启动命令行:“ java -jar myapplication .jar”)的情况下执行 Java 应用程序时,JVM 将自行调整某些特定的参数,以在当前执行环境中获得最佳性能表现。
Swap,性能之鸿沟,生死之地,存亡之道,不可不省也。这一句话足以表明 Swap 在操作系统生态中的特殊地位,以及能否正确运用,对业务架构或多或少产生较大影响。
随着技术的“革命性”发展,以及市场的竞争所需,技能的提升比以往任何时候都显得尤为重要。作为技术人员,若要提升自身的综合能力,“源码”这一道关是不可逾越的鸿沟。俗语云:不入虎穴,焉得虎子。只有深入本质,才能够抓住核心要素,毕竟,源码是所有技术框架的灵魂,只有对灵魂进行“革命性”洗礼,才能快速掌握其各路经脉,打通任督,从而建立此类技术相关体系。
“网络周边安全”是任何一个企业运维团队所必须关注的重点。当我们谈到网络界面控制时,我们往往潜意识地先会想到入站安全(入口)。然而,基于流量的运作,例如,何时可以离开网络(出口)以及流向哪里同样至关重要。在这篇文章中,我们将不深入讨论为什么控制出口流量如此重要的理论细节,毕竟,前人已经说的口都干了。因此,本文仅从技术演进层面来探讨关于在云原生生态中“出口”的选型及实现场景。
正如之前文章讲过:在 Unix / Linux 体系中,常常使用“用户” CPU 时间(us)、“系统” CPU 时间(sy)、“良好”的 CPU 时间(ni)、“空闲” CPU 时间(id)、“等待”CPU 时间(wa)、“硬件中断” CPU 时间(hi)、“软件中断” CPU 时间(si)以及“被盗” CPU 时间(st)等 8 个不同的指标来评判操作系统的 CPU 资源使用情况。
当前,云原生生态已经成为全球各大厂商以及企业尤其是互联网企业技术选型、场景推广的一个重要参考标准。云原生所代表的技术已经逐渐成为大家的共识,从一个虚无缥缈的概念逐渐演化成众多参与者的下一个技术战略储备。自然而言,承载业务需求的应用架构就会提及到微服务生态体系,以及其中最重要的分布式协作模式——“Service Discovery”,即:服务发现。
随着 JDK 版本的不断升级,其 GC 策略也随之不停革新,从早期的 1.4 到如今的 11(本文仅讨论在线上环境落地规模较大的版本),其对应的 GC 策略也随之由 Serial、Parallel、CMS 演进至当前的 G1 甚至即将落地的 ZGC 。每一次的调整无不是基于环境的适配性以及业务场景特性,无论如何,只要能够基于特定的操作系统内核、物理内存、JDK版本以及业务特性,达到收益最大化,采用何种实现策略都不为过。当然,还是建议大家以官方的推荐为准,基于自己的业务场景进行不断优化调整,这样才能保证万无一失,使得我们的业务能够健康发展。
毫无疑问,MongoDB 是当前较为流行的可用于构建应用程序的一种 NoSQL 数据库。但就像许多以电子表格开始的“初学者”进行数据分析项目一样,当需要深入时,也需要进行升级。当公司的应用程序从“个人作坊”推广至企业规模运行时,他们经常会发现 MongoDB 已开始无法满足他们的业务诉求。
其实,往往有的时候,“思维方式”比提升技术更为重要,在个人职业发展生涯中,因此,今天,我们扯一下:做人。
在上篇文章中,我们解析了 Java 虚拟机体系生态中基于 CMS GC 策略的调优场景及基本案例,具体链接为:Java虚拟机 CMS GC 调优解析。本文则重点介绍另一款当前比较流行的 GC 策略 - G1。
在之前的文章中,我们介绍了基于 CBBACK 以及 CBRESTORE 等操作方式进行的分布式数据库 Couchbase 集群迁移方案,具体可参考链接:分布式数据库Couchbase 集群迁移。其实,在基于不同的业务场景以及架构方案,针对分布式数据库 Couchbase 集群迁移有多种不同的实现策略,只有能够达到高效、稳定及安全,才是最优选择。
在云原生时代,基于主流的云操作系统 Kubernetes ,其常见的外部流量访问方式主要基于以下 NodePort、LoadBalancer 以及 Ingress 等。
在上一篇文章中,我们简要地解析了 eBPF 内核独立子系统的基本概念、发展历史、架构模型以及优缺点等,具体可参考:Linux eBPF解析。
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范围最广的 K8S CNI 网络方案 Calico 已宣布支持 eBPF,而作为第一个实现了Kube-Proxy 所有功能的 K8S 网络方案——Cilium 也是基于 eBPF 技术。因此,只有了解其底层机制,才能有助于更好、更易地融入容器生态中。
在互联网+ 和新商业业态的冲击下,传统行业正处于技术架构转型的十字路口,随着业务的不断创新变化,服务架构也随之无时无刻地进行革新。从早期的单体应用架构、面向SOA架构以及现在的微服务架构,无不是随着业务场景的不同诉求而进行适应性架构变迁。基于当前行业的业务发展,天然基于云服务的云原生模式无疑能给出重要参考意义。然而如何落地云原生技术正逐步成为行业用户的焦点。作为云原生生态领域中的关键一员,微服务的一举一动牵动着整个生态的发展方向。
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商以及企业只能望洋兴叹。此时,分布式系统的出现无疑给大家带来了些许振奋。而后随着大数据、区块链技术以及云计算技术的蓬勃发展,使得将分布式系统推向新的高潮。
随着5G 革命的爆发,Edge Computing (边缘计算) 此类词汇开始走向大众的视野,据不完全统计,自2016年起,全球的巨头们开始布局这一生态
Service Mesh(服务网格)诞生于云原生生态领域的潮流中,虽然大家对这一技术生态充满不确定性,甚至难以接受,然而,如果我们消除外面的“杂声”,细心洞察里面的细节,或许能有不一样的收获,毕竟,所有新技术的出现是为了解决业务痛点,而非是为了一些没用意义的炒作。
随着技术体系的不断革新,基于原有的模式或思路使得软件的架构越来越难以维护,无论是国外还是国内的软件行业,都得到进一步的证实。依据各大主流技术论坛或者商业网站,目测,全球大约有85%以上的企业计划使用或者正在使用微服务体系生态。毕竟,原有的单一架构体系难以继续开发和持续维护,而基于微服务生态则允许使用较小的目标服务来实现更大的敏捷性收益。
基于不同的业务场景中,我们该如何在 Kubernetes 生态集群中规划我们应用程序接口的访问策略呢?
Gateway( 网关),顾名思义,是出现在系统边界上的一个面向API或应用服务的、串行集中式的强管控服务,这里我们讨论的边界可以基于企业IT系统的边界,当然,可以理解为企业级应用防火墙,其目标主要起到隔离外部访问与内部系统交互的作用。在微服务概念的流行之前,网关就已经诞生了,在面向SOA体系中已经成熟,然而,随着微服务体系的快速发展,更进一步将Gateway推向更高的浪口。与其说网关催生了微服务体系,不如说微服务体系拥抱了网关。