-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontent.json
More file actions
1 lines (1 loc) · 38.8 KB
/
content.json
File metadata and controls
1 lines (1 loc) · 38.8 KB
1
{"pages":[],"posts":[{"title":"58同城的技术架构","text":"单机系统Windows全家桶 Windows + IIS + SQL Server + C-Sharp —— 面向问题编程","link":"/pages/58-arch/"},{"title":"大型网站架构演进","text":"单机架构 第一次演进:Tomcat与数据库分开部署 第二次演进:引入本地缓存和分布式缓存 第三次演进:引入反向代理实现负载均衡 第四次演进:数据库读写分离 第五次演进:数据库按业务分库 第六次演进:把大表拆分为小表 第七次演进:使用LVS或F5来使多个Nginx负载均衡 第八次演进:通过DNS轮询实现机房间的负载均衡 第九次演进:引入NoSQL数据库和搜索引擎等技术 第十次演进:大应用拆分为小应用 第十一次演进:复用的功能抽离成微服务 第十二次演进:引入企业服务总线ESB屏蔽服务接口的访问差异 第十三次演进:引入容器化技术实现运行环境隔离与动态服务管理 第十四次演进:以云平台承载系统","link":"/pages/arch-taobao/"},{"title":"大数据技术综述","text":"本文为对2014年的大数据技术综述论文《Big Data: A Survey》的翻译,论文作者为 Min Chen、Shiwen Mao和Yunhao Liu","link":"/pages/big-data-survey/"},{"title":"字节跳动基于 Serverless 的前端研发模式升级","text":"大家好,我叫王磊,来自于字节跳动 Web Infra,今天由我给大家分享《字节跳动基于 Serverless 的前端研发模式升级》。","link":"/pages/bytedance-serverless-frontend/"},{"title":"在Ubuntu中编译Python3.7","text":"下载Python3.7源码1wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz 解压: 1tar -xvf Python-3.7.0.tar.xz","link":"/pages/cpython-1/"},{"title":"YARN 在字节跳动的优化与实践","text":"导读: 本文从利用率提升、多负载场景优化、稳定性提升、异地多活四个方面介绍了字节跳动在四年来对 Hadoop YARN 进行的一系列的优化,以及生产环境中的实践经验。","link":"/pages/bytedance-yarn/"},{"title":"用GDB调试CPython","text":"准备前提:按在Ubuntu中编译Python3.7的步骤编译CPython3.7, 注意要以调试模式编译--with-pydebug","link":"/pages/cpython-2/"},{"title":"谈Python的执行过程(1):认识字节码和CPython对象","text":"本文描述CPython是如何执行一个Python程序的。 通常来说我们运行Python有以下几种方式:","link":"/pages/cpython-3/"},{"title":"谈Python的执行过程(2):字节码的执行","text":"从PyEval_EvalCode到PyEval_EvalFrame紧接着上一篇谈Python的执行过程(1):关于字节码和CPython对象, 这里我们要执行的程序仍然是test.py: 1a = 1000","link":"/pages/cpython-4/"},{"title":"谈Python的执行过程(3):函数的实现","text":"为了了解CPython是如何实现python函数,我们分析以下代码的执行过程:","link":"/pages/cpython-5/"},{"title":"斗鱼的技术架构","text":"业务后台架构早期架构 (2014) 单体应用 Nginx+PHP+Memcached+MySQL 问题:粉丝收到大主播开播信息后,涌入直播间,获取直播间信息等。Memcache采用一致性哈希,同一个直播间的缓存key落在了同一个Memcachd节点,会造成改节点负载过高。 另外,如果Memcached此时没有该直播间信息的缓存,此时大量的并发请求会到达MySQL(缓存击穿)","link":"/pages/douyu-arch/"},{"title":"一文了解CRI通过Containerd创建Pod的过程","text":"前言Containerd在某些场景下已经替代docker成为了kubernetes的首选容器运行时。比如边缘端场景k8s的衍生项目k3s则使用containerd代替docker作为默认运行时;比如安全容器场景kata、gVisor项目都直接使用containerd来与k8s对接(并非通过docker)。k8s将对容器的操作抽象成了CRI接口来支持多种容器运行时,针对containerd,k8s社区为其开发了cri-plugin内置在containerd中来支持k8s。本文将针对CRI接口通过containerd创建k8s Pod的详细过程进行介绍。","link":"/pages/how-create-pod-with-cri/"},{"title":"百度的在离线混部技术","text":"【百度云原生导读】服务器资源利用率较低,TCO(IT 基础设施的总拥有成本)逐年上涨,对于拥有大量机器资源的公司来说无疑是一个头疼的问题。 混部技术就是在这种情况下应运而生,目前,混部技术在业界还属于比较小众的领域,只有一些资源量级较大的公司在研究、发展混部技术,以期获得收益。 对于百度而言,通过应用混部技术,主混部集群数十万台,提升CPU利用率到40+%,累计节约了数十亿人民币。目前百度容器引擎产品 CCE 已支持在离线混部,并完成了大规模业务落地,本文将带大家深入了解百度的在离线混部技术。","link":"/pages/hybrid-deploy-baidu/"},{"title":"字节跳动的在离线混部技术","text":"5 月 30 日,字节跳动技术沙龙 | 基础架构专场 进行了在线直播。我们邀请到了字节跳动基础架构团队资深研发工程师邵伟、江帆和大家进行分享交流。 本次沙龙给大家分享的主题是《大规模混合部署项目在字节跳动的落地实践》,希望这次的分享能够带给大家一些我们对混部的思考。 沙龙分享的内容将会围绕以下问题来进行: 首先是字节跳动为什么想要开启混部,它产生的背景是什么样的,字节内部的业务形态有什么样的特征使我们能够开启大规模的混部? 我们具体做了哪些事情来支持混部的顺利开启和落地,在其中遇到哪些问题和挑战? 以及,在字节内部,混部有哪些典型的应用场景,分别是为了解决什么问题,带来了哪些收益等等。","link":"/pages/hybrid-deploy-bytedance/"},{"title":"腾讯Caelus—全场景在离线混部","text":"引言: 集群管理的一个重要目标是提高资源利用率,随着集群规模的扩大,基础设施成本上涨,资源利用率问题逐步突显,为降低成本,混部技术应运而生。本篇文章结合腾讯技术团队在混部方面的落地和实战经验,来介绍各类场景下在线离线混部的相关概念、面临的问题及混部技术方案,抛砖引玉,供大家交流。","link":"/pages/hybrid-deploy-tx/"},{"title":"Kubernetes API 与 Operator:不为人知的开发者战争(二)","text":"前情回顾:《Kubernetes API 与 Operator:不为人知的开发者战争(上) 2016 年秋天,原 CoreOS 公司的工程师邓洪超像往常一样,来到了同事位于福斯特城(Foster City)的公寓进行结对编程。每周四相约在这里结对,是这两位工程师多年来约定俗成的惯例。","link":"/pages/k8s-operator-2/"},{"title":"Kubernetes API 与 Operator:不为人知的开发者战争(一)","text":"如果我问你,如何把一个 etcd 集群部署在 Google Cloud 或者阿里云上,你一定会不假思索的给出答案:当然是用 etcd Operator!","link":"/pages/k8s-operator/"},{"title":"腾讯:如何提升Kubernetes集群资源利用率","text":"王孝威,腾讯云容器产品经理,热衷于为客户提供高效的 Kubernetes 使用方式,为客户极致降本增效服务。 晏子怡,腾讯云容器产品经理,在Kubernetes 弹性伸缩、资源高效利用领域有丰富的实战经验。 背景公有云的发展为业务的稳定性、可拓展性、便利性带来了极大帮助。这种用租代替买、并且提供完善的技术支持和保障的服务,理应为业务带来降本增效的效果。但实际上业务上云并不意味着成本一定减少,还需适配云上业务的应用开发、架构设计、管理运维、合理使用等多方面解决方案,才能真正助力业务的降本增效。在《Kubernetes 降本增效标准指南》系列的上一篇文章《容器化计算资源利用率现象剖析》中可看到,IDC 上云后资源利用率提高有限,即使已经容器化,节点的平均利用率依旧仅在 13% 左右,资源利用率的提升任重道远。 本篇文章将带你了解:为什么 Kubernetes 集群中的 CPU 和内存资源利用率 通常都如此之低?现阶段在 TKE 上面有哪些产品化的方法可以轻松提升资源利用率?","link":"/pages/k8s-resource-utils-tx/"},{"title":"一文了解Knative流量机制","text":"自动扩缩容是 Serverless 的核心特征,更好、更快的冷启动是所有 Serverless 平台的极致追求,本文基于网易杭州研究院云计算团队的探索,针对热门 Serverless 平台 Knative,解析其与自动扩容密切相关的流量实现机制,希望能够帮助从业者更好地理解 Knative autoscale 功能。","link":"/pages/knative-traffic/"},{"title":"Kata Container & gVisor: a Quantitative Comparison","text":"对比Kata Container和gVisor","link":"/pages/kata-vs-gvisor/"},{"title":"爱奇艺视频生产 Kubernetes 集群优化实践:感知业务优先级","text":"本文介绍爱奇艺针对视频生产场景、在 Kubernetes(以下简称 K8s) 集群优化方面的实践:如何使高优先级任务获得更多的 CPU 资源,更快完成任务。","link":"/pages/practice-iqiyi-k8s-1/"},{"title":"Pinterest的技术架构","text":"本文来自QCon","link":"/pages/pinterest-arch/"},{"title":"阿里达摩院刘春辰:鲁棒时序异常检测与周期识别","text":"2021国际AIOps挑战赛决赛暨AIOps创新高峰论坛于2021年5月13日在北京成功举行。本文根据阿里巴巴达摩院-机器智能技术-决策智能实验室高级算法专家刘春辰博士分享的《鲁棒时序异常检测与周期识别》报告,整理而成。","link":"/pages/practice-ali-robustx/"},{"title":"Kubernetes如何改变美团的云基础设施?","text":"Kubernetes已经成为美团云基础设施的管理引擎,它带来的不仅仅是高效的资源管理,同时也大幅降低了成本,而且为美团云原生架构的推进打下了坚实的基础,支持了Serverless、云原生分布式数据库等一些平台完成容器化和云原生化的建设。","link":"/pages/practice-meitun-k8s-1/"},{"title":"美团点评Kubernetes集群管理实践","text":"背景作为国内领先的生活服务平台,美团点评很多业务都具有非常显著、规律的“高峰”和“低谷”特征。尤其遇到节假日或促销活动,流量还会在短时间内出现爆发式的增长。这对集群中心的资源弹性和可用性有非常高的要求,同时也会使系统在支撑业务流量时的复杂度和成本支出呈现指数级增长。而我们需要做的,就是利用有限的资源最大化地提升集群的吞吐能力,以保障用户体验。 本文将介绍美团点评Kubernetes集群管理与使用实践,包括美团点评集群管理与调度系统介绍、Kubernetes管理与实践、Kubernetes优化与改造以及资源管理与优化等。","link":"/pages/practice-meitun-k8s-2/"},{"title":"美团Serverless平台Nest的探索与实践","text":"1 背景Serverless一词于2012年被提出,2014年由于亚马逊的AWS Lambda无服务器计算服务的兴起,而被大家广泛认知。Serverless通常被直译成“无服务器”,无服务器计算是可以让用户在不考虑服务器的情况下构建并运行应用程序。使用无服务器计算,应用程序仍在服务器上运行,但所有服务器管理工作均由Serverless平台负责。如机器申请、代码发布、机器宕机、实例扩缩容、机房容灾等都由平台帮助自动完成,业务开发只需考虑业务逻辑的实现即可。","link":"/pages/practice-meitun-serverless-1/"},{"title":"美团弹性伸缩系统的技术演进与落地实践","text":"弹性伸缩具有应突发、省成本、自动化的业务价值。平台侧将各业务零散、闲置资源进行整合,形成一个大规模资源池,通过弹性调度、库存管控技术在公司运营成本和业务体感中寻求较好的平衡。 本文将介绍美团弹性伸缩系统落地过程中面临的技术挑战、推广以及在运营层面的一些思考。在美团这种多样化的业务场景中落地弹性伸缩,与业界公有云、自建私有云的公司相比,既有共性又有自己的特点,希望能为大家提供新的思路或者启发。","link":"/pages/practice-meitun-k8s-3/"},{"title":"腾讯云私有化容器平台之网络","text":"刚开始接触容器集群的人会发现,与在单节点上使用容器相比,容器集群一个很复杂的领域就是网络。Kubernetes 作为容器编排领域的事实标准,对容器集群的网络进行了合理抽象,并开放了容器网络标准 CNI,供各公司根据自身应用场景和底层基础设施选用开源方案或者自行实现一套网络插件。本文主要介绍腾讯云容器平台针对私有化不同场景的一些网络方案实践。","link":"/pages/practice-tx-k8s-1/"},{"title":"携程混合云之Kubernetes at AWS揭秘","text":"一、引言随着携程国际化战略的实施和业务海外的部署,混合云已经达到了一定的规模。为了支持容器,我们在AWS上部署了kubernetes。主要是弹性发布的考量。","link":"/pages/practice-xiecheng-k8s-1/"},{"title":"性能提升40%: 腾讯 TKE 用 eBPF绕过 conntrack 优化K8s Service","text":"作者范建明、洪志国、张浩,均为腾讯云容器产品中心高级工程师,负责容器网络和Service Mesh,容器Runtime,调度等相关研发工作。 Kubernetes Service[1] 用于实现集群中业务之间的互相调用和负载均衡,目前社区的实现主要有userspace,iptables和IPVS三种模式。IPVS模式的性能最好,但依然有优化的空间。该模式利用IPVS内核模块实现DNAT,利用nf_conntrack/iptables实现SNAT。nf_conntrack是为通用目的设计的,其内部的状态和流程都比较复杂,带来很大的性能损耗。 腾讯TKE团队[2] 开发了新的IPVS-BPF模式,完全绕过nf_conntrack的处理逻辑,使用eBPF完成SNAT功能。对最常用的Pod访问ClusterIP场景,短连接性能提升**40%,p99时延降低31%**;NodePort场景提升,详情见下表和性能测量章节。","link":"/pages/practice-tx-k8s-2/"},{"title":"作业帮 Kubernetes 原生调度器优化实践","text":"吕亚霖,2019年加入作业帮,作业帮架构研发负责人,在作业帮期间主导了云原生架构演进、推动实施容器化改造、服务治理、GO微服务框架、DevOps的落地实践。 简介调度系统的本质是为计算服务/任务匹配合适的资源,使其能够稳定高效地运行,以及在此的基础上进一步提高资源使用密度,而影响应用运行的因素非常多,比如 CPU、内存、IO、差异化的资源设备等等一系列因素都会影响应用运行的表现。同时,单独和整体的资源请求、硬件/软件/策略限制、 亲和性要求、数据区域、负载间的干扰等因素以及周期性流量场景、计算密集场景、在离线混合等不同的应用场景的交织也带来了决策上的多变。","link":"/pages/practice-zuoyebang-k8s-1/"},{"title":"不知道做啥?看下那些真实业务场景下的技术问题","text":"","link":"/pages/problems/"},{"title":"Python异步编程:从多线程到协程","text":"摘要C10K问题 仍是软件开发者致力于解决的一个难题。通常,我们通过thread、epoll或kqueue处理大量 I/O操作,以避免软件阻塞在一些耗时的IO操作上。然而,由于数据共享和任务依赖性,开发可读且无错误的并发代码具有挑战性。尽管一些强大的工具,例如 Valgrind,帮助开发人员检测死锁或其他异步问题,当软件规模变大时,解决这些问题可能会很耗时。因此,许多编程语言(例如 Python、Javascript 或C++)致力于开发更好的库、框架或语法,以帮助程序员正确管理并发任务。本文主要关注异步编程模式背后的设计理念,而不是关注如何使用现代并行API。","link":"/pages/python-async/"},{"title":"一文了解安全容器","text":"从2015年5月初开始创业开发 HyperContainer (runV) 到现在,也快五年了,在这个时候还来写一篇什么是安全容器,显得略有尴尬。不过,也正是经过这五年,越来越多到人开始感到,我需要它却说不清它,这个时候来给大家重新解释 安全容器也正是时候。","link":"/pages/secure-container/"},{"title":"(云计算) 如何解决Serverless函数冷启动的问题?","text":"背景 如果你的PaaS能够有效地在20毫秒内启动实例并运行半秒,那么就可以称之为Serverless。 —— AWS云架构战略副总裁Adrian Cockcroft1 Serverless的最大卖点之一就是在做弹性伸缩时可以将实例数缩到0,没流量时不花钱,有流量来时再扩容。然而理想很丰满,现实很骨感。 无论是在流量刚到达时实例数从0到1,还是为了处理更多的流量将实例数从m扩到n的过程,不得不面对的一个问题就是:冷启动。冷启动时间太长, 就会出现请求超时。","link":"/pages/serverless-coldstart/"},{"title":"Serverless 距离大规模应用还有多远?从冷启动说起","text":"Techo TVP开发者峰会 ServerlessDays China 2021 的压轴环节是圆桌对话,首次齐聚 AWS、阿里云、字节跳动等全球 TOP 云厂商和互联网企业,深入探讨 Serverless 当前现状、发展趋势,并针对具体挑战和应对举措进行深度交流。本文是对本次圆桌论坛《聚焦当下,重构未来:Serverless 全球视野碰撞》的分享整理,希望带大家从更加全面的视角了解 Serverless 的价值、使用场景和收益,共同促进 Serverless 在中国的探索和落地。","link":"/pages/serverless-talk/"},{"title":"一文了解如何在Ubuntu上安装单节点Kubernetes","text":"如果不是root用户,那下面大多数命令都得加sudo 安装Docker1curl -fsSL https://get.docker.com | sudo sh 修改 docker 的 cgroup driver 选项为 systemd,与 k8s 保持一致,并修改 registry-mirror 加速下载","link":"/pages/single-node-k8s-ubuntu/"},{"title":"TKE基于弹性网卡直连Pod的网络负载均衡","text":"作者周宏宇,后台开发,目前负责腾讯云TKE的接入层网络组件(Ingress、Service)。在团队中负责接入层组件的技术方案、开发测试以及相关的服务技术支持。","link":"/pages/tke-eni/"},{"title":"(智能运维) 如何对监控指标做异常检测?","text":"背景参考链接 腾讯 织云Metis时间序列异常检测全方位解析 美团 外卖订单量预测异常报警模型实践 滴滴 滴滴出行海量数据场景下的智能监控与故障定位实践","link":"/pages/ts-anomaly-detection/"},{"title":"Twitter的技术架构","text":"背景2013年时推文的TPS2013年8月3日星期六,人们观看了《天空之城》的播出,Twiiter当时推文的TPS峰值达到了:每秒 143,199 条推文","link":"/pages/twitter-arch/"},{"title":"微信的技术架构","text":"","link":"/pages/weixin-arch/"},{"title":"微博的技术架构","text":"背景 每条微博,在技术上也被称为status或feed. 微博中的关注页是一个feed流,聚合了自己关注了的人的微博。","link":"/pages/weibo-arch/"},{"title":"一文了解如何保证缓存和数据库的最终一致性","text":"到底是更新缓存还是删除缓存? 到底是先更新数据库,再删除缓存,还是先删除缓存,再更新数据库?本文主要介绍了在不同场景下保证数据缓存一致性的相关策略。","link":"/pages/wiki-cache-db-consistent/"},{"title":"一文了解CDN加速原理","text":"CDN(Content Delivery Network,内容分发网络)是构建在现有互联网基础之上的一层智能虚拟网络,通过在网络各处部署节点服务器,实现将源站内容分发至所有CDN节点,使用户可以就近获得所需的内容。CDN服务缩短了用户查看内容的访问延迟,提高了用户访问网站的响应速度与网站的可用性,解决了网络带宽小、用户访问量大、网点分布不均等问题。","link":"/pages/wiki-cdn/"},{"title":"一文了解缓存","text":"作者:vivo互联网服务器团队-Zhang Peng 一、缓存简介1.1 什么是缓存 缓存就是数据交换的缓冲区。缓存的本质是一个内存 Hash。缓存是一种利用空间换时间的设计,其目标就是更快、更近:极大的提高。","link":"/pages/wiki-cache/"},{"title":"一文了解鸭子类型(Duck typing)","text":"鸭子测试在说鸭子类型(Duck typing)之前,我们先说下鸭子测试(Duck test)。 鸭子测试的意思是,如果我要判断一个东西是否是鸭子,我就看它是不是像鸭子那样走路,像鸭子那样嘎嘎叫,如果是,那它应该就是一只鸭子。(姑且不论这样判断一个东西是否是鸭子是否正确) 如果它看起来像鸭子、游泳像鸭子、叫声像鸭子,那么它可能就是只鸭子。","link":"/pages/wiki-ducktyping/"},{"title":"一文了解Kubernetes扁平化网络Flannel","text":"Flannel是kubernetes的CNI网络插件之一,实质上是一种主机 overlay网络 。flannel支持多种网络转发模式,常用的是vxlan、hostgw等,我们这里以常用的 udp VXLAN协议讲解。","link":"/pages/wiki-flannel/"},{"title":"一文了解 Kubernetes 整体架构","text":"Kubernetes 的架构设计以及组件之间的通信协议","link":"/pages/wiki-k8s-arch/"},{"title":"一文了解文件系统的发展:从单机到分布式","text":"本文为英文","link":"/pages/wiki-dev-of-file-system/"},{"title":"一文了解C程序是如何运行起来的","text":"你用C语言写了个输出Hello world代码(为了分析一些东西,我加了各种类型的变量和函数):","link":"/pages/wiki-howcrun/"},{"title":"一文了解Kubernetes控制器模型","text":"本文来自极客时间的《深入剖析Kubernetes》系列 你好,我是张磊。今天我和你分享的主题是:编排其实很简单之谈谈“控制器”模型。 在上一篇文章中,我和你详细介绍了Pod的用法,讲解了Pod这个API对象的各个字段。而接下来,我们就一起来看看“编排”这个Kubernetes项目最核心的功能吧。","link":"/pages/wiki-k8s-controller/"},{"title":"一文了解Kubernetes控制器Deployment","text":"经过前面不少文章的铺垫,终于可以写这个大家都感兴趣的话题了,在前面两篇文章,我们讲了Kubernetes里的 Pod和 副本集ReplicaSet (RS) 这两个API对象。知道了Pod是Kubernetes里的最小调度单元,ReplicaSet则是控制Pod副本数的一个基础控制器。文章最后留下了一个话题: Kubernetes里一般使用Deployment控制器而不是直接使用ReplicaSet,Deployment是一个管理ReplicaSet并提供水平扩展/收缩、Pod声明式更新、应用的版本管理以及许多其他功能的更高级的控制器。 所以部署到Kubernetes集群里的Go项目就是通过Deployment这个控制器实现应用的水平扩展/收缩和更应用新管理的,它通过自己的控制循环确保集群里当前的状态始终等于Deployment对象定义的期望状态。","link":"/pages/wiki-k8s-deployment/"},{"title":"一文了解Kubernetes三层网络方案host-gw","text":"本文来自极客时间的《深入剖析Kubernetes》系列,很不错, 值得一看。 你好,我是张磊。今天我和你分享的主题是:解读Kubernetes三层网络方案。 在上一篇文章中,我以网桥类型的Flannel插件为例,为你讲解了Kubernetes里容器网络和CNI插件的主要工作原理。不过,除了这种模式之外,还有一种纯三层(Pure Layer 3)网络方案非常值得你注意。其中的典型例子,莫过于Flannel的host-gw模式和Calico项目了。 我们先来看一下Flannel的host-gw模式。","link":"/pages/wiki-k8s-hostgw/"},{"title":"高可用的Kubernetes集群部署方案","text":"涉及到的内容 LVS HAProxy Harbor etcd Kubernetes (Master Worker)","link":"/pages/wiki-k8s-high-availability/"},{"title":"一文了解Kubernetes服务发现之KubeDNS","text":"前面我们给大家讲解了Service的用法,我们可以通过 Service 生成的ClusterIP(VIP)来访问 Pod 提供的服务,但是在使用的时候还有一个问题:我们怎么知道某个应用的 VIP 呢?比如我们有两个应用,一个是 api 应用,一个是 db 应用,两个应用都是通过Deployment进行管理的,并且都通过 Service 暴露出了端口提供服务。api 需要连接到 db 这个应用,我们只知道 db 应用的名称和 db 对应的 Service 的名称,但是并不知道它的 VIP 地址,我们前面的 Service 课程中是不是学习到我们通过ClusterIP就可以访问到后面的Pod服务,如果我们知道了 VIP 的地址是不是就行了?","link":"/pages/wiki-k8s-kubedns/"},{"title":"一文了解Kubernetes Ingress","text":"Kubernetes Ingress 只是 Kubernetes 中的一个普通资源对象,需要一个对应的 Ingress 控制器来解析 Ingress 的规则,暴露服务到外部,比如 ingress-nginx,本质上来说它只是一个 Nginx Pod,然后将请求重定向到其他内部(ClusterIP)服务去,这个 Pod 本身也是通过 Kubernetes 服务暴露出去,最常见的方式是通过 LoadBalancer 来实现的。同样本文我们希望用一个简单清晰的概述,让你来了解 Kubernetes Ingress 背后的东西,让你更容易理解使用的 Ingress。 我们可以使用 Ingress 来使内部服务暴露到集群外部去,它为你节省了宝贵的静态 IP,因为你不需要声明多个 LoadBalancer 服务了,此次,它还可以进行更多的额外配置。下面我们通过一个简单的示例来对 Ingress 进行一些说明吧。","link":"/pages/wiki-k8s-ingress/"},{"title":"一文了解Kubernetes控制器ReplicaSet","text":"Kubernetes最核心的功能就是编排,而编排操作都是依靠控制器对象来完成的,高级的控制器对象控制基础的控制器对象,基础的控制器对象再去控制Pod,Pod里面再包容器。Kubernetes项目里API对象的层级结构大概就是这样。前面的文章:(Kubernetes Pod入门指南) 已经介绍了Pod概念和使用方法,今天我们来介绍管理Pod的最基础的一个控制器ReplicaSet。","link":"/pages/wiki-k8s-replicaset/"},{"title":"一文了解Kubernetes service的不同类型:ClusterIP、NodePort和LoadBalancer等","text":"在 Kubernetes 中 Service 主要有4种不同的类型,其中的 ClusterIP 是最基础的,如下图所示:","link":"/pages/wiki-k8s-service-type/"},{"title":"一文了解Kubernetes Service","text":"为什么需要 service在 kubernetes 中,当创建带有多个副本的 deployment 时,kubernetes 会创建出多个 pod,此时即一个服务后端有多个容器,那么在 kubernetes 中负载均衡怎么做,容器漂移后 ip 也会发生变化,如何做服务发现以及会话保持?这就是 service 的作用,service 是一组具有相同 label pod 集合的抽象,集群内外的各个服务可以通过 service 进行互相通信,当创建一个 service 对象时也会对应创建一个 endpoint 对象,endpoint 是用来做容器发现的,service 只是将多个 pod 进行关联,实际的路由转发都是由 kubernetes 中的 kube-proxy 组件来实现,因此,service 必须 kube-proxy 使用,kube-proxy 组件可以运行在 kubernetes 集群中的每一个节点上也可以只运行在单独的几个节点上,其会根据 service 和 endpoints 的变动来改变节点上 iptables 或者 ipvs 中保存的路由规则。","link":"/pages/wiki-k8s-service/"},{"title":"一文了解 Linux 虚拟网络设备Bridge","text":"Linux Bridge(网桥)是用纯软件实现的虚拟交换机,有着和物理交换机相同的功能,例如二层交换,MAC地址学习等。因此我们可以把tun/tap,veth pair等设备绑定到网桥上,就像是把设备连接到物理交换机上一样。此外它和veth pair、tun/tap一样,也是一种虚拟网络设备,具有虚拟设备的所有特性,例如配置IP,MAC地址等","link":"/pages/wiki-linux-network-bridge/"},{"title":"一文了解 Linux network namespace","text":"大家好,我是飞哥! 在 Linux 上通过 veth 我们可以创建出许多的虚拟设备。通过 Bridge 模拟以太网交换机的方式可以让这些网络设备之间进行通信。不过虚拟化中还有很重要的一步,那就是隔离。借用 Docker 的概念来说,那就是不能让 A 容器用到 B 容器的设备,甚至连看一眼都不可以。只有这样才能保证不同的容器之间复用硬件资源的同时,还不会影响其它容器的正常运行。 在 Linux 上实现隔离的技术手段就是 namespace。通过 namespace 可以隔离容器的进程 PID、文件系统挂载点、主机名等多种资源。不过我们今天重点要介绍的是网络 namespace,简称 netns。它可以为不同的命名空间从逻辑上提供独立的网络协议栈,具体包括网络设备、路由表、arp表、iptables、以及套接字(socket)等。使得不同的网络空间就都好像运行在独立的网络中一样。","link":"/pages/wiki-linux-network-namespace/"},{"title":"一文了解 Linux 网络包接收过程","text":"因为要对百万、千万、甚至是过亿的用户提供各种网络服务,所以在一线互联网企业里面试和晋升后端开发同学的其中一个重点要求就是要能支撑高并发,要理解性能开销,会进行性能优化。而很多时候,如果你对Linux底层的理解不深的话,遇到很多线上性能瓶颈你会觉得狗拿刺猬,无从下手。 我们今天用图解的方式,来深度理解一下在Linux下网络包的接收过程。还是按照惯例来借用一段最简单的代码开始思考。为了简单起见,我们用udp来举例,如下:","link":"/pages/wiki-linux-network-recv/"},{"title":"一文了解 Linux 网络包发送过程","text":"大家好,我是飞哥! 半年前我以源码的方式描述了网络包的接收过程。之后不断有粉丝提醒我还没聊发送过程呢。好,安排! 在开始今天的文章之前,我先来请大家思考几个小问题。 问1:我们在查看内核发送数据消耗的 CPU 时,是应该看 sy 还是 si ? 问2:为什么你服务器上的 /proc/softirqs 里 NET_RX 要比 NET_TX 大的多的多? 问3:发送网络数据的时候都涉及到哪些内存拷贝操作? 这些问题虽然在线上经常看到,但我们似乎很少去深究。如果真的能透彻地把这些问题理解到位,我们对性能的掌控能力将会变得更强。","link":"/pages/wiki-linux-network/"},{"title":"一文了解 Linux 虚拟网络设备veth","text":"大家好,我是飞哥! 正如我在朋友圈里所说的,最近我又对网络虚拟化技术产生了浓厚的兴趣。迫切想搞明白在 Docker 等虚拟技术下,网络底层是如何运行的。 不得不说,网络虚拟化技术是我给自己抛的又一个大坑。虽然我自认为把原生 Linux 网络实现过程理解的还算不错了。但在看网络虚拟化相关的技术的时候,还是觉得不是很容易。 不过,飞哥有绝招,那就是先挑个软柿子来捏。这不,今天我给大家带来的就是 Docker 网络虚拟化中的一个比较好理解的技术 - veth。 回想下在物理机组成的网络里,最基础,最简单的网络连接方式是什么?没错,那就是直接用一根交叉网线把两台电脑的网卡连起来。这样,一台机器发送数据,另外一台就能收到了。","link":"/pages/wiki-linux-network-veth/"},{"title":"一文了解netfilter 和 iptables","text":"Netfilter (配合 iptables)使得用户空间应用程序可以注册内核网络栈在处理数据包时应用的处理规则,实现高效的网络转发和过滤。很多常见的主机防火墙程序以及 Kubernetes 的 Service 转发都是通过 iptables 来实现的。 关于 netfilter 的介绍文章大部分只描述了抽象的概念,实际上其内核代码的基本实现不算复杂,本文主要参考 Linux 内核 2.6 版本代码(早期版本较为简单),与最新的 5.x 版本在实现上可能有较大差异,但基本设计变化不大,不影响理解其原理。","link":"/pages/wiki-netfilter-iptables/"},{"title":"一文了解集线器、交换机、路由器、MAC地址、IP地址和ARP","text":"你是一台电脑,你的名字叫 A 很久很久之前,你不与任何其他电脑相连接,孤苦伶仃。 直到有一天,你希望与另一台电脑 B 建立通信,于是你们各开了一个网口,用一根网线连接了起来。","link":"/pages/wiki-network/"},{"title":"一文了解RPC同步调用和异步调用","text":"要搞定RPC框架,RPC框架分为客户端部分与服务端部分。 RPC-client的部分又分为: (1)序列化反序列化的部分(上图中的1、4) (2)发送字节流与接收字节流的部分(上图中的2、3)","link":"/pages/wiki-rpc-call/"},{"title":"一文了解Paxos","text":"背景 分布式系统中, 其中一个基础的问题是如何在不可靠硬件(低可用性)基础上构建可靠(高可用性)的服务, 要达成这个目标, 核心的手段就是复制(例如一份数据存3个副本). 而复制过程中的一致性问题, 最后都归结为Paxos的解决方案2 Paxos","link":"/pages/wiki-paxos/"},{"title":"一文了解 Nginx 高性能网络工作原理","text":"大家好,我是飞哥! 在单进程的网络编程模型中。所有的网络相关的动作都是在一个进程里完成的,如监听 socket 的创建, bind、listen。再比如 epoll 的创建、要监听事件的添加,以及 epoll_wait 等待时间发生。这些统统都是在一个进程里搞定。 一个客户端和使用了 epoll 的服务端的交互过程如下图所示。","link":"/pages/wiki-nginx-network/"},{"title":"一文了解静态类型语言与动态类型语言","text":"通常来说,关于这两者的定义,你会看到两种说法。 是否在运行前知道类型第一种是: A language is statically typed if the type of a variable is known at compile time. A language is dynamically typed if the type is associated with run-time values, and not named variables/fields/etc. 如果我们可以在编译期知道变量的类型,我们就说这种语言是静态类型(statically typed)。这里我更倾向于把编译期改为运行期之前(before run-time), 因为有些语言并不编译(后文也一样)。 如果我们运行期才知道变量的类型,则称其为动态类型的(dynamically typed)。","link":"/pages/wiki-static-dynamic-typing/"},{"title":"一文了解虚拟私有云VPC的实现","text":"大家好,我是二哥。新年第一篇肝文来了。在开始之前,我们先来看看下面几个问题: XX云上租用VM,你一定会碰到VPC。你是否好奇过VPC到底是如何实现的? 你在XX云上租用的VM和别人家的VM跑在一台物理机上,它们之间的网络流量又是如何被隔离的? 你的1000个K8s Pod分散在50个VM上,这50个VM又散落在10个物理机上,那这些Pod之间通信时,数据包是如何跨物理机流动的? 来吧,进入正题。","link":"/pages/wiki-vpc/"},{"title":"一文了解Service Mesh","text":"服务网格是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,服务网格保证请求在这些拓扑中可靠地穿梭。在实际应用当中,服务网格通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但对应用程序透明。 Service Mesh具有如下优点: 屏蔽分布式系统通信的复杂性(负载均衡、服务发现、认证授权、监控追踪、流量控制等等),服务只用关注业务逻辑; 真正的语言无关,服务可以用任何语言编写,只需和Service Mesh通信即可; 对应用透明,Service Mesh组件可以单独升级;","link":"/pages/wiki-service-mesh/"},{"title":"有道Kubernetes容器API监控系统设计和实践","text":"本篇文章,将给大家分享有道容器服务API监控方案,这个方案同时具有轻量级和灵活性的特点,很好地体现了Kubernetes集群化管理的优势,解决了静态配置的监控不满足容器服务监控的需求。并做了易用性和误报消减、可视化面板等一系列优化,目前已经超过80%的容器服务已经接入了该监控系统。","link":"/pages/youdao-k8s-1/"},{"title":"一文了解Web即时通信WebIM","text":"什么是IM IM(Instant Messaging)即时通信,是一种通过网络进行实时通信的系统,允许两人或多人使用网络即时的传递文字消息、文件、语音与视频交流,通常以网站、软件或者移动app的方式提供服务。自从互联网的兴起,IM就一直和我们的生活息息相关,日常聊天、工作、打车、外卖、购物等等,可以说,我们现在的生活已经几乎离不开IM。","link":"/pages/wiki-webim/"},{"title":"知乎的技术架构","text":"Timeline架构演进这里的Timeline是指按时间排列的用户的动态(关注了问题,赞同了回答,发表回答等),","link":"/pages/zhihu-arch/"}],"tags":[{"name":"时间序列","slug":"时间序列","link":"/tags/%E6%97%B6%E9%97%B4%E5%BA%8F%E5%88%97/"},{"name":"大数据","slug":"大数据","link":"/tags/%E5%A4%A7%E6%95%B0%E6%8D%AE/"},{"name":"Serverless","slug":"Serverless","link":"/tags/Serverless/"},{"name":"CPython","slug":"CPython","link":"/tags/CPython/"},{"name":"Yarn","slug":"Yarn","link":"/tags/Yarn/"},{"name":"Kubernetes","slug":"Kubernetes","link":"/tags/Kubernetes/"},{"name":"在离线混部","slug":"在离线混部","link":"/tags/%E5%9C%A8%E7%A6%BB%E7%BA%BF%E6%B7%B7%E9%83%A8/"},{"name":"Knative","slug":"Knative","link":"/tags/Knative/"},{"name":"虚拟机","slug":"虚拟机","link":"/tags/%E8%99%9A%E6%8B%9F%E6%9C%BA/"},{"name":"Python","slug":"Python","link":"/tags/Python/"},{"name":"智能运维","slug":"智能运维","link":"/tags/%E6%99%BA%E8%83%BD%E8%BF%90%E7%BB%B4/"},{"name":"Feed服务","slug":"Feed服务","link":"/tags/Feed%E6%9C%8D%E5%8A%A1/"},{"name":"分布式一致性","slug":"分布式一致性","link":"/tags/%E5%88%86%E5%B8%83%E5%BC%8F%E4%B8%80%E8%87%B4%E6%80%A7/"},{"name":"缓存","slug":"缓存","link":"/tags/%E7%BC%93%E5%AD%98/"},{"name":"语言特性","slug":"语言特性","link":"/tags/%E8%AF%AD%E8%A8%80%E7%89%B9%E6%80%A7/"},{"name":"网络虚拟化","slug":"网络虚拟化","link":"/tags/%E7%BD%91%E7%BB%9C%E8%99%9A%E6%8B%9F%E5%8C%96/"},{"name":"编译原理","slug":"编译原理","link":"/tags/%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%86/"},{"name":"Linux网络","slug":"Linux网络","link":"/tags/Linux%E7%BD%91%E7%BB%9C/"},{"name":"RPC","slug":"RPC","link":"/tags/RPC/"}],"categories":[{"name":"技术架构","slug":"技术架构","link":"/categories/%E6%8A%80%E6%9C%AF%E6%9E%B6%E6%9E%84/"},{"name":"综述","slug":"综述","link":"/categories/%E7%BB%BC%E8%BF%B0/"},{"name":"一文了解","slug":"一文了解","link":"/categories/%E4%B8%80%E6%96%87%E4%BA%86%E8%A7%A3/"},{"name":"技术实践","slug":"技术实践","link":"/categories/%E6%8A%80%E6%9C%AF%E5%AE%9E%E8%B7%B5/"},{"name":"问题","slug":"问题","link":"/categories/%E9%97%AE%E9%A2%98/"}]}