深夜,在世界尽头为毛洪涛痛哭

深夜,在世界尽头为毛洪涛痛哭

閱讀本文約花費: 8 (分鐘)1 我和毛洪涛老师素不相识,但在昨天深夜,突如其来地,却为毛老师痛哭失声,虽然,在我自己遭遇挫折时,从来没有流泪过。 网上有毛洪涛的学生们留下这样的文字: 记得我跟我父亲因为他喝酒的问题吵架吵到大晚上情绪崩溃,跟您发微信抱怨,您马上给我打电话,站在父辈的角度宽慰了我一个小时。 记得您带我们一群人出去玩,下车后您跟我说,你开得比你师兄们都好,读书不好不够聪明努力的我因为受到您的表扬开心了一整天。 记得的事太多,可是毛老师,您说您退了休让我们陪您跳广场舞的,您忘了吗? 请注意,这仅仅是一个家势普通的寻常学子,而毛老师当时已经身居高位,却能如此关心一个平凡的学生,这说明他随时都是在以热诚和最大的真心,在对待每一位他身旁的普通学子。 这,是一个心中无善的人,所不可能长期做到的。 2 有个别人说毛老师可能是沽名钓誉,但沽名钓誉之人怎可能有勇气放弃生命?有个别人说毛老师是因权力斗争而自绝,但是,一个常识是,在乎权力的人一定是极为贪生的。 自杀必是理想主义者才会做的事情。因为任何人在生死之间做权衡时,只有理想才比生命更重。 对于毛洪涛老师与他以死指控的人,之间具体的纷争,我期待着调查组公正的裁决。对此不做任何事先评价,因为作为局外人,我们的确无法触摸到具体的事实。 但,这不妨碍我们从毛洪涛老师的绝笔信里,真真切切感受到他发自内心的正义感。何况这种正义感他并非空口说一…

Read More Read More

crontab的默认执行路径问题

crontab的默认执行路径问题

閱讀本文約花費: 2 (分鐘)在Linux下,执行路径经常会影响一个程序的执行结果,最近用到crontab命令,好奇crontab的默认执行路径。 结论: crontab的默认执行路径为:当前用户的根路径。如果希望改变执行路径,可以通过简单的shell编程的方式(见下文)。如果不确定执行的路径,可以通过shell编程的方式去调用程序。 1. 实验测试 1.1 查看我们的根路径: 这里的根路径:/root 1.2 然后我们在根路径创建一个测试目录: 1.3 在该路径下,我们写一个python程序,输出当前路径。 1.4 运行该程序: 1.5 查看输出结果: 输出结果如下: 1.6 然后我们在crontab中定时调度该脚本,并把结果打印到another.log中: 1.7 一分钟后查看another.log的结果: 发现路径是/root,也就是当前用户的根路径。验证了 crontab的默认执行路径为:当前用户的根路径。 那么接下来,我们如何切换crontab执行的路径呢? 2. 更改程序在crontab中的执行路径 其实很简单,通过简单的shell编程即可: 2.1 我们在 /root/d1/d2/d3 路径下,在创建一个start_test.sh(注意增加可执行权限 chmod 777 start_test.sh)文件: 2.2 然后配置到crontab…

Read More Read More

linux shell脚本EOF妙用

linux shell脚本EOF妙用

閱讀本文約花費: 5 (分鐘)在平时的运维工作中,我们经常会碰到这样一个场景:执行脚本的时候,需要往一个文件里自动输入N行内容。如果是少数的几行内容,还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式就显得愚蠢之极了!这个时候,就可以使用EOF结合cat命令进行行内容的追加了。 下面就对EOF的用法进行梳理:EOF是END Of File的缩写,表示自定义终止符.既然自定义,那么EOF就不是固定的,可以随意设置别名,在linux按ctrl-d就代表EOF.EOF一般会配合cat能够多行文本输出.其用法如下:<<EOF        //开始….EOF            //结束 还可以自定义,比如自定义:<<BBB        //开始….BBB              //结束 通过cat配合重定向能够生成文件并追加操作,在它之前先熟悉几个特殊符号:< :输入重定向> :输出重定向>> :输出重定向,进行追加,不会覆盖之前内容 << :标准输入…

Read More Read More

WebSocket从入门到精通,半小时就够!

WebSocket从入门到精通,半小时就够!

閱讀本文約花費: 27 (分鐘)自从HTML5里的WebSocket出现后,彻底改变了以往Web端即时通讯技术的基础通道这个“痛点”(在此之前,开发者们不得不弄出了诸如:短轮询、长轮询、Comet、SSE等技术,可谓苦之久矣…),如今再也不用纠结到底该用“轮询”还是“Comet”技术来保证数据的实时性了,幸福来得就是如此突然 ^-^。 WebSocket如今不仅在Web应用里使用广泛,也慢慢被开发者们应用到各种那些原本使用TCP、UDP这类协议的富客户端(比如移动端中)。 有鉴于此,对于即时通讯方向的开发者来说,全面深入的了解WebSocket是非常有必要的,面试时也少不了会考察这方面的知识。 所以,即时通讯网在建站至今的几年时间里,持续整理了一大批跟Web端即时通讯有关的技术文章(这基中尤其WebSocket方面的文章最多)。本文也是一篇关于WebSocket从入门到精通的文章,内容由浅入深,比较适合想要在短时间内较深入的了解WebSocket协议的开发者学习。 《WebSocket详解(一):初步认识WebSocket技术》 《WebSocket详解(二):技术原理、代码演示和应用案例》 《WebSocket详解(三):深入WebSocket通信协议细节》 《WebSocket详解(四):刨根问底HTTP与WebSocket的关系(上篇)》 《WebSocket详解…

Read More Read More

别让自己“墙”了自己

别让自己“墙”了自己

閱讀本文約花費: 19 (分鐘)这一两周与几个朋友聊天,有年轻的90后,也有大叔级的70后,这些人在我看来都是很有能力的人,但是一些喜好过于强烈,让我不经意地回顾了我工作20年来身边的人,有发展得好的,也有发展的不好的,有些人是很可惜的,因为限制他们的不是其它人,也不是环境,而是自己,所以,很想写下这篇文章。(注:这篇文章可能会是一篇说教的文章,所以,可能会让你看着犯困,所以,我会尽量地短一些,而且尽可能多讲故事,少道理,这里的故事,全是真实发生的) 几个故事 2019年年初,我面试了一个很年轻的小伙子(93/94年出生),这个小伙子特别有灵性,也很聪明,计算机专业出身,也很喜欢技术,基础和学习能力也很好。在我这20年来认识的人中,如果他能呆在北京、上海、深圳这样的城市,我保证不出三年,他会成为他们同龄人中非常出色的技术人员,如果有个好的舞台有一个好的团队带他,他的未来会非常成功。然而,这个小伙子有两大喜好:1)只愿(或是说被迫)呆在一个毫无IT的环境的三/四线城市,2)对技术有非常大的偏好,只喜欢Go语言,非常不喜欢其它的语言,比如:Java(离开Java的世界,基本上离开了做架构的世界(相关解释见文末))。 他的这两个喜好,足以让一个未来会很优秀的人毁掉,因为,这个时代没有限制他,他的能力也没有限制他,但是他的意识完完全全地限制了他。 他把自己最宝贵的青春放在了很烂的项目上,就…

Read More Read More

微服务,如何拆分服务是精髓 | 技术前沿

微服务,如何拆分服务是精髓 | 技术前沿

閱讀本文約花費: 12 (分鐘)在《云原生基础架构最佳状态,就是没有基础架构》一文中,我们探讨了云原生基础架构的内涵及价值。   本篇我们讨论云原生的又一个重要理念——微服务。   其实之前在《理解了云原生,才能正确迎接云时代的到来》一文中已经简单阐释过微服务,它是区别于过去单一架构产品开发模式的一种新型方式,为的是持续交付这一云原生终极目标。可以说,微服务是云原生的灵魂。既然如此重要,本篇再来详细展开一下,包括什么是微服务、为什么需要微服务、微服务的设计原则等。 从历史发展看微服务起源 2005年,Peter Rodgers博士在云端运算博览会上提出微Web服务(Micro-Web-Service),将程序设计成细粒度的服务,以作为Microsoft下一阶段的软件架构。   2014年,Martin Fowler与James Lewis共同提出了微服务的概念,定义了微服务架构是以开发一组小型服务的方式来开发一个独立的应用系统,每个服务都以一个独立进程的方式运行,每个服务与其他服务之间使用轻量级(通常是HTTP API)通信机制。   Amazon是遇到“微服务”问题最早的公司。当年,Amazon面临着这样一个问题,当团队人数快速增长之后,沟通效率越来越低,如何提高效率,如何减少会议?最终想出来的办法是拆分服务,让各个团队关注不同的模块,让每…

Read More Read More

从PHP到Node,聊一聊淘宝首页背后的技术

从PHP到Node,聊一聊淘宝首页背后的技术

閱讀本文約花費: 22 (分鐘)“作者从2014年双十二结束时开始接手淘宝首页,经历了淘宝首页的两次改版和一次从PHP到Node的迁移,不久前完成了工作的交接。本文介绍了淘宝首页的变迁过程、性能优化、稳定性保障和敏捷措施,分享了作者在此过程中的感受。 相关背景介绍 淘宝首页是淘宝的门面,承载着几乎淘系所有业务的入口,流量很大,量级单位为亿。近几年无线端崛起,业务重点开始向无线终端偏移(目前不能叫偏移,基本以无线为主了),所以淘宝 PC 端首页的流量也有削减,不过即便如此,它的日均 PV 依然相当高。 淘宝首页一向是内部平台和技术的试验田,它一直在变化着。最新的框架和系统都会找淘宝首页试点,可以试想下,如果某一项需要推动的升级或者优化措施在淘宝首页已经上线,并且拿到了良好的数据和稳定性,其他业务还有什么理由不去尝试和更迭呢?同时,去年一年身在淘宝前端的技术架构组,自然而然也会主动去 push 一些实验性的内容到业务上。 淘系的站点页面包括首页、其他频道页和活动页等,这些页面并不都由淘宝前端一行一行的代码码出来,业务如此之多,这种玩法即便人数 double 也忙不过来。事实上,大多数页面都是依托内部的搭建平台一一运营或者前端通过模块搭建的方式一一构建的,而前端 focus 的重点在于搭建平台的建设自身以及模块的通用性和复用率的保障,当然,还有一些工程化的东西。 使用搭建平台搭建的页面,…

Read More Read More

etcd的简单使用

etcd的简单使用

閱讀本文約花費: 9 (分鐘)etcd的简单使用 ETCD安装配置 安装 去https://github.com/coreos/etcd/releases/下载想要的版本解压etcd包解压后进入目录,增加x权限 chmod +x etcd chmod +x etcdctl 并将etcd和etcdctl 复制到 /bin 配置启动 简单启动 ./bin/etcd 这样就可以启动使用 集群配置 在两台机器上部署了简单的集群 192.168.231.130 192.168.231.132 在配置文件/etc/defalut/etcd 中增加: ETCD_OPTS=”-name infra0 -initial-advertise-peer-urls http://192.168.231.130:2380 -listen-peer-urls http://192.168.231.130:2380 -initial-cluster- token etcd-cluster-1 -initial-cluster infra0=http://192.168.231.130:2380,infra1=http://192.168.231.132:2380 -initial-cluster-state new” 也可用参数的方法 ETCD_INITIAL_CLUSTER=”infra0=http://19…

Read More Read More

Cgroup和Namespace在测试中的使用(下)

Cgroup和Namespace在测试中的使用(下)

閱讀本文約花費: 7 (分鐘)Namespace介绍 使用Namespace又叫做命名空间,可以让每个进程组具有独立的PID、IPC和网络空间等,也就是说这些系统资源不再是全局性的,而是属于特定的Namespace,每个Namespace里面的资源对其他Namespace都是透明的,从而达到资源的隔离效果。 目前namespace的种类如下分类 系统调用参数Mount namespaces CLONE_NEWNSUTS namespaces CLONE_NEWUTSIPC namespaces CLONE_NEWIPCPID namespaces CLONE_NEWPIDNetwork namespaces CLONE_NEWNETUser namespaces CLONE_NEWUSER 可以查看自己的系统支持哪些namespace# ls -lai /proc/1/nstotal 0418834 dr-x–x–x 2 root root 0 Jul 30 22:58 .1301 dr-xr-xr-x 9 root root 0 Jul 25 22:46 ..41885…

Read More Read More

Docker不香吗,为啥还要K8s?

Docker不香吗,为啥还要K8s?

閱讀本文約花費: 16 (分鐘)上一篇文章我们着重讲解了 Docker,其实遗留了一个大问题。Docker 虽好用,但面对强大的集群,成千上万的容器,突然感觉不香了。 这时候就需要我们的主角 Kubernetes 上场了,先来了解一下 K8s 的基本概念,后面再介绍实践,由浅入深步步为营。 关于 K8s 的基本概念我们将会围绕如下七点展开: Docker 的管理痛点 什么是 K8s? 云架构 & 云原生 K8s 架构原理 K8s 核心组件 K8s 的服务注册与发现 关键问题 Docker 的管理痛点 如果想要将 Docker 应用于庞大的业务实现,是存在困难的编排、管理和调度问题。 于是,我们迫切需要一套管理系统,对 Docker 及容器进行更高级更灵活的管理。 Kubernetes 应运而生!Kubernetes,名词源于希腊语,意为「舵手」或「飞行员」。 image Google 在 2014 年开源了 Kubernetes 项目,建立在 Google 在大规模运行生产工作负载方面拥有十几年的经验的基础上,结合了社区中最好的想法和实践。 K8s 是 Kubernetes 的缩写,用 8 替代了 「ubernete」,下文我们将使用简称。 什么是 K8s ? image K8s 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 …

Read More Read More

左耳朵耗子- 技术博客学习

左耳朵耗子- 技术博客学习

閱讀本文約花費: 3 (分鐘)1.通过在公司工作提高自己的技能,让自己可以更为独立和自由地生活。 2.对于没什么技术含量的工作内容,提高交付效率。把时间用来研究高技术含量的知识。3.要写文章就写别人没有写过的,或是别人写过,但我能写得更好的。4.看清市场需求(各个公司正在做什么,难题是什么)和技术趋势(首先要了解技术的历史,把本质吃透:看经典书籍,向前沿学习)5.在学习技术的过程一定要多问自己两个问题:“一,这个技术解决什么问题?为什么别的同类技术做不到?二,为什么是这样解决的?有没有更好的方式?”另外,还有一个简单的判断方法,如果一个新的技术顺应技术发展趋势,那么在这个新的技术出现时,后面一定会有大型的商业公司支持(专门做此类技术的公司),这类公司支持得越多,就说明你越需要关注。6.在一家高速发展的公司中,技术人员的价值可以达到最大化。比较好的成长路径是,先进入大公司学习大公司的技术和成功的经验,然后再找到高速成长的公司,这样你就可以实现自己更多的价值。7.动手能力很重要,持续在前线工作。8.关注技术付费点:一个是,能帮别人“挣钱”的地方;另一个是,能帮别人“省钱”的地方。9.提高自己的能力和经历。找到有价值的信息源(知识的源头:西方世界) ,最好的技术在西方: google (xxx_技术 best practice/programming , Best programming…

Read More Read More

微信、陌陌等著名IM软件设计架构详解

微信、陌陌等著名IM软件设计架构详解

閱讀本文約花費: 13 (分鐘)对微信、陌陌等进行了分析,发出来分享一下(时间有些久了) 电量:对于移动设备最大的瓶颈就是电量了。因为用户不可能随时携带电源,充电宝。所以必须考虑到电量问题。那就要检查我们工程是不是有后台运行,心跳包发送时间是不是合理。 流量:对于好多国内大部分屌丝用户来说可能还是包月30M,那么我们必须站在广大用户角度来考虑问题了。一个包可以解决的就一个包。 网络: 这个也是IM最核心的内容了,我们要做到在任何网络下等顺畅聊天那就不容易了,好多公司都用的xmpp框架,如果在强网络环境下,xmpp完全没有问题。但是那种弱网络环境下xmpp就束手无策啦,用户体验就很垃圾了。 个人觉得xmpp 可以玩玩(参考看这个RFC3920和RFC3921), 但是用来真正的产品就差远了。如果遇到一个做IM 的朋友张口闭口都说xmpp 的话,那么不用沟通了,肯定不是什么好产品。微信、QQ以前也曾用过xmpp,但是最后也放弃了xmpp,就知道xmpp有很多弊端了,还有就是报文太大,好臃肿,浪费流量。为了保证稳定,微信用了长链接和短链接相结合,例如: 1 、两个域名 微信划分了http模式(short链接)和 tcp 模式(long 链接),分别应对状态协议和数据传输协议 long.weixin.qq.com  dns che…

Read More Read More

Cgroup和Namespace在测试中的使用(上)

Cgroup和Namespace在测试中的使用(上)

閱讀本文約花費: 12 (分鐘)很多时候需要测试程序在资源受限情况下的表现,普通的做法可能是不断对系统加压使能够分配给目标程序的资源变少,换另一个思路思考,可以尝试限制分配给目标程序的资源总数,使得机器状态健康的情况下让程序资源使用达到饱和。 作为一个正在做着容器项目的人,知道容器技术是依靠Cgroup和Namespace来实现的。在容器中,cpu和内存资源是使用Cgroup来控制,PID、IPC、网络等资源是通过Namespace来划分。在程序没有部署在容器的情况下,我们仍可以利用Cgoup和Namespace来构造场景完成一些异常测试,如利用Cgroup的资源控制功能做资源满载的测试;利用Namespace的资源隔离特性做一些网络异常测试而不影响其他程序的运行。 Cgroup介绍 Cgroup是进行分组化管理的Linux内核功能,具体的资源管理是通过子系统来完成的。可以理解为子系统就是资源控制器,每种子系统就是一个资源的分配器,比如cpu子系统是控制cpu时间分配的,使用方式如下 安装(ubuntu) #apt-get install cgroup-bin 基本命令 cgclassify — cgclassify命令是用来将运行的任务移动到一个或者多个cgroup。cgclear — cgclear 命令是用来删除…

Read More Read More

企业应用架构演化探讨:从微服务到Service Mesh

企业应用架构演化探讨:从微服务到Service Mesh

閱讀本文約花費: 18 (分鐘)导读 当下微服务的实践方案中,Spring Cloud,Dubbo作为主流的落地方案,在企业应用架构中发挥越来越重要的作用。需要特别说明:本文讨论的架构目前适用于普通的企业级应用,其他行业(例如互联网)需要进一步扩展。 在讨论之前,我们需要明确一个事实:企业应用一定是围绕业务进行的。无论采用什么的架构落地,都是为了更好的为应用业务进行服务。从企业应用的特性考虑,主要包括:稳定性,安全性,扩展性,容错性。 围绕着企业应用的这些特点,我们来看一个典型的微服务企业架构模型,如图所示: 服务接入层:企业暴露到外部访问的入口,一般通过防火墙等。 网关层:服务网关是介于客户端和服务端的中间层,所有的外部请求会先经过服务网关,为企业应用提供统一的访问控制入口。服务网关是微服务架构下的服务拆分,聚合,路由,认证以及流控综合体现。 支撑服务层:为企业应用提供运行所需的支撑环境,包括注册发现,集中配置,容错限流,认证授权,日志聚合,监测告警,消息服务等 业务服务层:业务服务是企业应用的核心所在,为企业领域应用的具体实现,一般进一步拆分为基础服务(基础功能)和聚合服务(综合场景)。 平台服务层:为企业应用提供运行所需的软件资源,包括应用服务器,应用发布管理,应用镜像包管理,服务治理。 基础设施层:为企业应用提供运行所需的硬件资源,包括计算资源,网络资源,存储资源,基本的安…

Read More Read More

dubbo接口自动化用例性能优化

dubbo接口自动化用例性能优化

閱讀本文約花費: 8 (分鐘)前言 去年换了一个新部门,看了下当前的自动化用例的情况,发现存在三类性能问题: 本地调试运行时等待时间较长,就算是一个简单的case,执行时间都需要1分钟以上 单用例执行时间比较长,部分用例执行时间超过2分钟 集成到CI中运行时,执行时间较长 对于上述三个问题花时间进行了一定程度的优化,总结如下 优化本地调试时间 通过调试可以发现,一个需要执行660ms的case,在执行前的初始化工作就需要消耗约1分半钟,那么就需要思考下能否减少这部分初始化时间了。 公司用的自动化框架是基于AbstractTestNGSpringContextTests的框架。AbstractTestNGSpringContextTests是一个spring集成testNg的工具,可以通过ApplicationContext加载bean。ApplicationContext实现的默认行为就是在启动服务器时将所有bean提前进行实例化。提前实例化意味着作为初始化过程的一部分,applicationContext实例会创建并配置所有的bean。 如果是作为一个spring服务,在启动时将bean提前进行实例化,然后可以处理所有的请求,这样的做法是很合理的。但是作为本地调试,更关注是自己case运行时所需要的bean是否实例化,而不需要将所有bean进行实例化。 查阅了下spring相关文…

Read More Read More

谁是 左耳朵耗子?

谁是 左耳朵耗子?

閱讀本文約花費: 3 (分鐘)每一位初出茅庐的程序员,都梦想着能遇到一位技术大神,把自己领进编程高手的殿堂。可是现实中,身边并没有那么多大神,即使偶尔遇到,人家也没时间去手把手指导你。 今天小灰给大家介绍一位大神,虽然他的技术非常厉害,但为人却很热情谦逊,很愿意指导行业的新人。这位大神是谁呢?他就是 左耳朵耗子。 左耳朵耗子是谁? 左耳朵耗子,本名陈皓。资深技术专家,骨灰级程序员。MegaEase 创始人, 致力于为企业提供高可用、高并发、高性能的分布式技术产品,同时也提供物联网(IoT)方向的技术产品。 20年技术管理与实战经验,曾在阿里巴巴、亚马逊、汤森路透等公司任职,职业背景是金融和电子商务行业,精通架构和各种大规模的系统开发。十余年受到企业邀请,进行内部培训和分享,涵盖软件团队管理、架构技术、编程语言、操作系统等各方面,并为企业量身定制的咨询或软件开发。 陈皓文章观点鲜明,具有极强的个人风格与特点,言辞犀利,引发读者思考与讨论,鼓励批评与不同的声音。2002 年开始写技术博客,十余年坚持分享对技术的一些见解和心得,得到数十万开发者追随。 左耳朵耗子为我们带来了什么? 陈皓先生花费大量心血,为我们带来一系列精彩的专栏课程分享。课程包含了与技术人或企业切身利益相关的内容,以及更具指导性、更有商业价值的经验。每篇文章都是陈皓的亲身经历和实践总结,非常来之不易。 内容将会…

Read More Read More

     
Scroll Up