首页 文章 精选 留言 我的

精选列表

搜索[技能退化],共7427篇文章
优秀的个人博客,低调大师

运维工程师需要掌握的技能

提起运维,大家都会想到又苦又累,又不被人重视的网管,机房运维,认为这个工种很low,入门门槛低,做的事比较杂,从搬服务器上架到修打印机,修电脑,处理网络小故障等杂七杂八的活,究其原因,多年来小公司都把运维当做一种打杂的小工使。其实运维从分类可以分为很多专业领域,比如网络工程师,系统工程师,备份存储工程师,CDN工程师,数据库管理员,应用运维,运维开发,运维架构师等等岗位,本章暂不对运维岗位做过多解释,我就个人的经验,我是从运维实施、系统管理员、DBA最后到运维开发的,简单说说各大互联网公司对岗位的面试要求: WEB篇:1、负载均衡篇:熟悉常用的负载均衡技术,LVS,dpdk,Nginx等四层/七层负载均衡,除了硬件负载均衡设备F5,有搭建、维护并熟悉负载均衡原理;2、Nginx 重要配置、优化及使用、与lua的结合,接入、降级、限流、隔离、熔断、动静分离、反向代理、负载均衡,反爬虫,黑白名单等 另Nginx 和Apache的比较;3、TCP/HTTPs协议及三次握手,四次挥手,get/post的差异,协议头,跳转,常见返回码的含义200/30x/40x/50x等知识及导致返回码的可能故障原因,如果可能请详细了解TCP/TP协议内容;4、web的优化,web 访问的流程,从浏览器-DNS-CDN-缓存(本地缓存,负载均衡层,缓存层,接入层,应用层,数据库层)-应用-数据库整个流程,需要陈述过程,并能解释调优排障的思路;http 连接越快越好,越快建立连接越好,中间DNS解析, tcp握手都是可以优化的点http 请求少并且小,减少请求的数量,请求的体积,比如 cookie的大小 解析html 的速度,dom树解析,js 执行和首屏渲染是串行的,页面渲染,把js放到body后面加载页面,下载资源,利用上面的原则,尽量少的发http请求,比如图片,字体,以及js文件等等 网络篇:网络抖动,网卡打满,大面积断网,网络丢包,网络劫持,接口响应超时等,常用网络故障排查的手段,工具等,如tcpdump/iftop/traceroute/netstat等 故障篇:网络失败,业务异常(参数错误、业务逻辑处理错误,返回数据格式错误等下游业务不可用),机器故障 cpu 负载太高,内存溢出,磁盘打满,网卡打满,超时监控快速反馈 监控:正面预防,快速发现、定位问题进行报警降级:反向止损,遇到故障自动处理,降低损失 监控篇: 常规监控: zabbix 、Ganglia、Cacti、Nagios等业务监控:业务指标的监控调用链监控:CAT、zipkin、阿里鹰眼等其他新兴监控: Prometheus open-falcon日志监控:ELK等另外时序数据库是监控领域比较火的技术,大家可以多研究一下 应用篇Java,weblogic,tomcat,jetty等Java中间件,涉及jvm 的调优,监控,GC的调优,cpu高的诊断dubbo spring cloud sprin boot sping 全家桶,微服务的搭建,部署,监控(调用链监控)鉴于微服务领域还不成熟,很多公司还没有实践,另外有必要了解K8S等编排工具消息中间库 rabbitmq 、rocketmq,Kafka 等对比使用,如吞吐量、时延等优缺点,运维中遇到的问题及故障处置redis 的架构,有单节点,官方cluster集群,复制,读写分离,分片等,业界使用的proxy 方案,对比优缺点,常遇到的故障及问题,再就是容灾,跨机房,业界的解决方案,一般是通过流复制redis 和memcache的区别,优缺点增加对项目的架构,集群规模,QPS/TPS等数据的认知mongodb 集群的运维,分片集群的规模,运维监控,处理过的问题及优化,主要有cpu高,慢查询,占用内存高,夯死等问题应用部署的问题,涉及发布,构建,编译等 大数据篇:Hadoop 生态圈 hdfs,habase ,hive,mapreduse,zookeerer,kafka,tez,impla,spark等组件,zeppelin,kylin,侧重生产机器的规模,遇到的问题,踩到的坑,有的侧重原理 数据库篇:MySQL oracle、简单了解,sql 语句的查询,索引的类型,数据库高可用架构,主从、双主、MHA架构、Proxy方案等,另外了解数据库中间件,例如mycat等 存储篇:ceph 的搭建,对象存储的原理,各种存储(NAS/SAN/对象存储等)的优缺点及使用场景 公有云、私有云篇:openstack ,zstack ,虚拟化 vm 的原理 docker 篇docker的基本原理、编排工具k8s 的使用,k8s 的概念,pod ,网络的解决方案遇到的坑及解决方案,当然也要防止某些辣鸡公司套你方案docker 自建仓库,docker file的使用 自动化运维篇自动化运维工具的使用,ansible ,saltstack 等使用,Django 的开发 cmdb/自动化部署,任务调度系统,数据库运维系统CI/CD的构建,自动化发布,灰度发布,金丝雀发布,蓝绿发布等等devops的概念及实施,对AIops的见解及作出的变革 开发篇:shell 脚本 基础运维命令python 开发 ,主要是web开发,表单的设计,数据库或者orm的设计,高并发,消息队列 restapi等 前端比较弱是运维的通病salca 略了解,多用于大数据开发go 略了解,如果熟悉并开发过项目,一定是加分项,求之不得; 面试篇:个人自我介绍目前的工作内容,负责的项目,遇到的故障,印象深刻的项目,遇到的挑战,遇到的棘手问题,自己负责过的项目,项目规模,集群规模,人数等等

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

现代网络性能监控工具应具备何种技能?

以前,企业网络工程师不得不为各种连接的服务器、应用程序和终端设备提供网络接入和足够的带宽。从OSI模型角度看,这些工具主要关注于1-4层网络。由于通过一个网络的所有流量和数据流都共享全部的带宽和队列资源,更高的OSI层次多少被忽略了。 慢慢地,网络设备变得越来越复杂,现在网络中不同的数据流都可以被识别出来并区别对待。各种服务质量(QoS)和应用层流程成型技术也可用于实现这个目 标。此外,随着对于关键业务应用程序依赖程度越来越高,网络工程师也迫切需要了解OSI模型的更高层次,这样他们才能发现网络、服务器操作系统、虚拟化软件和应用程序本身所存在的性能问题或其他问题。但是,要想解决这些问题,他们需要借助于一些工具。 在许多场景中,网络性能监控工具已经从较为传统和简单的网络监控软件向前进化。这些监控工具通常使用ICMP的ping和简单网络监控协议(SNMP)的 polling/traps去检查网络状态。更现代的补充功能包括监控、基线化和智能分析应用程序本身的所有状态。最先进的网络监控工具则还能够执行以下 5种功能: 1. 网络与应用程序监控 2. 网络问题分析 3. 应用数据与流拦截分析 4. 虚拟化与操作系统问题检测 5. 问题根源分析 不同的网络性能监控供应商在执行这些任务的粒度各不相同。而且,越精确的任务在实现和管理时会越复杂。因此,一定要准确理解自身组织的需求,之后再恰当地平衡粒度和复杂度。那么,我们接下来继续分析现代网络性能监控工具所具备的5个常用功能。 网络与应用程序监控 正如前面所提到的,现代网络监控工具已经从使用ICMP ping和SNMP协议的网络监控进化为更复杂的工具了。来自网络监控服务器的常规ping命令会发送到各种不同的网络、服务器及其他需要监控的终端设备 上。如果所监控的设备没有响应ping请求,那么监控工具可能会将该设备标记为“宕机”,然后向支持人员发出警报。 SNMP会收集和组织来自支持这种协议的网络与服务器组件的各种不同类型的数据。 对于网络设备而言,这通常意味着要不断地监控特定的设备接口状态和数据吞吐量。此外,它还会监控硬件状态,其中包括电源、风扇和内存使用率等。 有一些网络性能监控工具还能够收集和响应各不同的系统日志(Syslog)消息。系统日志是一种面向基础架构设备日志消息的通用标准。这些消息会被发送和 存储到一个集中的网络监控工具中,经过分析后会在出现系统故障时用于通知支持工程师。 网络监控工具具有全面的监控能力,它不仅能够监控可用性和性能统计数据,甚至能够监控整个应用层。这种监控通常依赖于所配置的软件插件或操作系统设置,将监控数据发送回中央监控服务器。 虚拟化和操作系统问题检测 网络与应用程序之间也一定会出现一些问题。这其中包括虚拟化、服务器操作系统及应用程序所依赖的各种中间件。虚拟机管理程序需要单独监控可能造成应用层性 能下降的问题。负责管理分布式系统之间通信的主操作系统和中间件也有一样的问题。网络性能监控供应商会使用不同的方法去监控这些问题,其中一些还支持更多 的虚拟机管理程序、操作系统和中间件软件。 网络问题分析 除了提供简单的在线/断线状态和使用率信息,网络性能监控产品还能执行更复杂的自动化网络故障修复任务。这其中包括路由协议监控和计划外路由变化警报。此外,有一些产品还能使用智能技术去理解各种WAN技术、虚拟堆叠和QoS特性的工作方式。此外,它们还能设置成在出现问题时自动发送警报,甚至还能够执行 自动修复问题的操作。 应用数据与流的捕捉分析 现代网络性能监控工具的最重要任务就是解析和分析数据与流。在网络中,不同区域可以用不同的方法去捕捉数据包,然后执行自动和/或人工分析。最常见的方法 有: 1. 在所有关键的网络位置上部署分布式数据采集代理。 2. 使用特定路由器/交换机硬件所具有的数据包捕捉功能。 分析数据包并执行更精细的应用分析,这是许多企业组织越来越重视的需求。通过使用深度数据包检测技术,网络管理员就能够分辨出与应用程序关系更密切的通信问题,否则这些问题很难检测到。 网络流采集会整理出数据进出网卡的IP网络统计信息。一旦将这些数据发送到一个集中的服务器并通过网络性能监控流分析工具的分析,网络支持管理员就能够分 辨流量的源信息和目标信息,以及流量在通过网络时会遇到的详细QoS策略。最终,这些数据会被用于识别网络设备之间的配置问题或各个网络路径的拥塞问题。 问题根源分析 在一个网络性能监控工具上整合各种事件数据并进行分析,能够形成一种自动化问题根源分析功能。如果网络中出现一个问题,然后它触发多个组件的事件,那么许 多网络性能监控工具都会使用人工智能技术分析这些事件的关联性,最终确定这个问题的根源。这是其中一个需要配置的复杂功能,因为它要求正确配置所有的设备 和监控系统。例如,如果设备时间没有通过网络时间协议(Network Time Protocol)进行同步,那么事件发现的时间就会出错。这会给问题根源分析引擎的精确度造成负面影响。但是,一旦创建好并采取正确的维护措施,自动化 问题根源分析工具就能够在故障修复方面节省大量的时间。 作者:佚名 来源:51CTO

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

数据科学挑战重重 get新技能成当务之急

随着更多新兴工具和技术的出现,许多企业正在努力应对当今大数据和数据科学生态系统的复杂性。 根据TDWI(数据仓库研究所)的最新研究,专业数据科学家的短缺仍然是企业面临的数据科学的挑战之一。 TDWI公司副总裁兼研究总监Fern Halper说:“我们经常听到很多组织表示,在数据科学环境中面临的最大挑战是找到合适的技术和工具。” 该研究收集了超过300家企业的大数据和数据科学经验。大数据分析和数据科学经验这两个主题越来越融合,因为组织需要了解过去几年中收集大量数据的工作者。 此次调查的受访者列举的其他常见挑战还有:缺乏对大数据工具的了解,缺乏利用大数据所需的企业架构,安全和隐私问题以及治理协议不足等问题。 尤其是技术方面的问题特别棘手。Halper表示,在过去几年中出现了许多新工具,包括Hadoop,Spark,Python等等,企业很难确保跟上这些新工具、新技术快速发展的步伐。 有些受访者认为很多技术让人眼花缭乱,其中不乏炒作的因素,他们有时不知道该怎样面对技术的迭代更新。另外一些人认为技术和工具变更速度很快,如果缺乏敏捷性,他们不一定能保持最好的架构。 现在,企业都在使用自己熟悉的工具和技术应对数据科学的挑战。约80%的受访者表示他们目前使用数据仓库工具作为主要数据源。对于分析而言,简单的查询和数据可视化工具是最常用的。在接下来的两年中,数据仓库工具将依然广受欢迎,与此同时,Hadoop和开源R也受到更多企业的青睐。 Halper说,调查结果显示出非结构化数据查询和预测分析(包括机器学习)的强劲势头。这些新兴工具和技术似乎将在未来将彻底取代更多的工具。 “数据仓库不会消失,但它正被其他类型的平台取代,并创建一个生态系统,” Halper说, “预测分析是一项热门技术,再加上机器学习的驱动,未来的发展势头不可小觑。” 本文转自d1net(转载)

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

PHP 技能精进之 PHP-FPM 多进程模型

PHP-FPM 提供了更好的 PHP 进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。那么当我们谈论 PHP-FPM 多进程模型的时候,作为 PHPer 的你了解多少呢? 首先,让我们一起看几个问题: ①:PHP-FPM 启动进程的方式主要有哪几种,区别是什么? ②:PHP-FPM,是主进程接收请求转给子进程,还是子进程单独接收请求并处理,如何验证? ③:为何在 PHP-FPM 模式下,PHP 代码很少有人去做连接池? ④:PHP-FPM 模式性能差的体现有哪些,如何优化? ⑤:PHP-FPM 模式下的 YAC 为何无法和 CLI 模式无法共享内存? 1. 如何启动进程 PHP-FPM 是多进程模式,由 Master 进程管理 Worker 进程。进程的数量,都可以通过 php-fpm.conf 做具体配置。PHP-FPM 的进程可以分为动态模式及静态模式: ①:静态(Static) 直接开启指定数量的 PHP-FPM 进程,不再增加或者减少;启动固定数量的进程,占用内存高。但在用户请求波动大的时候,对 Linux 操作系统进程的处理上耗费的系统资源低。 ②:动态(Dynamic) 开始时开启一定数量的 PHP-FPM 进程,当请求量变大的时候,动态增加 PHP-FPM进程数到上限,当空闲的时候自动释放空闲进程数到一个下限。 动态模式会根据 max、min、idle children 配置,动态的调整进程数量。在用户请求较为波动,或者瞬间请求增高的时候,动态模式下会进行大量进程的创建、销毁等操作,而造成 Linux 负载波动升高。简单来说,请求量少,PHP-FPM 进程数少,请求量大,进程数多。优势就是,当请求量小的时候,进程数少,内存占用也小。 ③:按需 (Ondemand) 这种模式下,PHP-FPM 的 Master 不会 Fork 任何子进程,纯粹就是按需启动。 这种模式通常很少使用,因为它基本无法适应有一定量级的线上业务。由于 php-fpm 是短连接的,所以每次请求都会先建立连接,建立连接的过程必然会触发上图的执行步骤。所以,在大流量的系统上 Master 进程会变得繁忙,占用系统 CPU 资源,不适合大流量环境的部署。 借用一张网络图片来说明: 需要注意 2 个点,「连接」和「数据」到来。有连接进来再 Fork 进程,同样可以达到子进程继承父进程上下文,然后子进程处理用户请求这个目的。 (关于动态、静态进程模式的相关参数,可参考 PHP 官方文档。) 我们需要关注的是对于我们自身的业务,应该选择的 PHP-FPM 模式为动态还是静态。 通常来说,对于比较大内存的服务器,设置为静态的话会提高效率。因为频繁开关 php-fpm 进程也会有时滞,所以内存够大的情况下开静态效果会更好。数量也可以根据 内存/30M 得到。比如说 2GB 内存的服务器,可以设置为 50;4GB 内存可以设置为 100 等。高配机器选静态,低配机器(省内存)选动态,高配机器用动态不能充分利用内存资源和 CPU 资源,也无法及时应对瞬时高并发。 2.如何进行请求处理和验证 PHP-FPM 的进程管理方式和 Nginx 的进程管理方式有些类似。在处理请求时,并非由主进程接受请求后转给子进程,而是子进程「抢占式」地接受用户请求。本质上 PHP-FPM 多进程以及 Nginx 多进程,都是在主进程监听同一个端口后,Fork 子进程达到多个进程监听同一端口的目的。 Linux 系统所有的进程 IO 操作,都需要和操作系统打交道。也就是说,系统知道所有 IO 操作。这个过程就是我们常说的「系统调用」。我们可以从系统调用入手解决这个问题。系统调用的查看,可以使用 Strace。 如何验证相对简单,我们可以采取 2 种方式: 看 PHP-FPM 进程的日志。这需要配置好合适的 PHP-FPM 日志格式; 既然 IO 数据会通过内核态过度到用户态进程,我们可以通过 strace -p <pid> 命令去跟踪系统调用。分别跟踪 PHP-FPM 的主进程 ID 以及子进程 ID,然后访问 Nginx,由 Nginx 通过 fast-cgi 协议转到 PHP-FPM 进程上,看在哪个进程上发送了系统调用。 3. 为何不在 PHP-FPM 下做代码连接池 ? 首先,在 PHP-FPM 模式下,一个请求的生命周期注定只有 1 次。也就是说,从 FPM 请求到请求、解析 PHP 脚本,到 FPM 的 Zend 虚拟机分配资源执行,再到最后的处理结束,PHP-FPM 会回收这次请求的所有资源。 这种方式一是为了让开发不需要关心资源的回收处理,所以你可能没怎么关心过网络的关闭、文件描述符的关闭等等。二是为了减少内存溢出的情况。 如果在这种模式下,你实现了连接池,也意味着请求结束,连接池消失,做了一次无用功而已。 「鸡肋的」PConnect(持久化链接)。持久化链接也就是链接不释放。但问题在于,PHP-FPM 是多进程模式,而持久化的链接存在于进程中。这就意味着,如果一台机器有 300 个 FPM 进程,会一次性初始化 300 个持久化链接。如果因为面临业务活动需求冒然对机器扩容,很可能造成业务的数据库连接数直接打满。 4. 如何优化性能 首先,我们应该思考导致性能差可能的原因是什么。如果一个应用的性能差,我们往往会从 2 个方面来分析,一个是 IO 性能,一个是计算性能。 IO 方面,因为 PHP-FPM 模式下难以做连接池,所以高并发业务下的网络处理会有劣势。注意我这里一直说的都是 PHP-FPM 模式下,在 CLI 模式下还是可以自己做连接池的。只不过这个连接池仅限于 CLI 模式的单进程内,而且这个模式不能用于处理网络请求(比如 HTTP 请求)。因为 PHP 默认单进程模式,FPM、CLI 都是默认单进程,即便 CLI 可以做连接池 ,也不方便做链接保活(不能同时做心跳检测)。 计算性能上来说,虽然 PHP 是用 C 写的,如果单纯论计算性能是不错的。但问题在于 PHP 处理请求时,每次都要解析 PHP 脚本、翻译 PHP 代码为 Opcode、用 Zend 虚拟机执行 Opcode,处理结束,释放资源。经历这样的过程是导致 PHP 计算性能慢的最大原因之一。 如何优化: 对于计算性能来说,使用 Zend OPcache 扩展,缓存字节码。 对于**IO 性能**来说,使用文件 cache 或者 memcached 减轻对网络 Cache 的压力;使用 Yac 减轻对 Cache 层的压力;在同一次请求中;复用链接不要每次都用新的;合理设计日志组件类库,优化 Logger 减少对文件操作的次数来减少 IO 的压力。 关于设计一个合格的 Logger 组件,我们需要注意几个点: ① 每次请求,只做一次日志写操作,不要每次别人调用你的函数,你都去执行一次类似 file_put_contents 的操作。 ② 兼容各种类似错误。换句话说,即使 PHP fatal error 了,你也得能把知名错误之前的日志记录下来。这个实现可以借助 PHP 类的析构方法来做。也可以使用更好的 register_shutdown_function 来注册一个钩子,在 PHP 请求结束的时候,回调此钩子,完成做最后的日志操作。 5. YAC 为何无法和 CLI 模式共享内存 我们知道,PHP 扩展开发中首要执行的一个宏是PHP_MINIT_FUNCTION。YAC 扩展需要在 PHP-FPM 进程启动时起就初始化一块共享内存,供各个进程来共享使用。因此,实现共享的关键在于需要一个让各个进程都知道的相同标识。 YAC 扩展的初始化流程为: 我们查看 create_segments 的具体实现: 上面做了一些注释,最关键的是要开启共享内存需要的系统 ID,shared_segment_name,此值包含了进程ID。也就是 PHP-FPM 的主进程 ID。有相同的共享内存标识 ID,就是 PHP-FPM 模式所有进程间能够通信的奥秘所在。而如果我们是想要通过 PHP 脚本使用 yac 扩展读取这个共享内存,会这样做: 在 CLI 模式下,这样是不可能拿到 PHP-FPM 模式下设置的共享内存数据的。因为 CLI 模式下执行 PHP 脚本、进程 ID,和 PHP-FPM 模式下的进程 ID 完全不相同。 后面的文章中,我们会找机会讲一讲进程间通讯,以及基于共享内存的通讯。总结来说,多进程要共享内存通信,必须要一开始就协调好一个唯一 ID。这个 ID 多个进程间都要知道。PHP-FPM 是多进程,主进程 fork 子进程出来,子进程自然知道这个唯一 ID 是什么(因为 Linux 进程 fork 会把整个进程的堆栈内存都 fork 一遍)。但是,php a.php 这样执行,其实是一个完全独立的进程,和 PHP-FPM 没任何关系,这样的进程,也就不能知道 PHP-FPM 进程里的那个唯一 ID 是什么。 本文作者:董红帅,马蜂窝系统部研发工程师。 关注马蜂窝技术,找到更多你想要的内容

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

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部分的功能。

用户登录
用户注册