阿里巴巴中间件高级技术专家
写了10年代码,混了10年,总要记录一点什么,来阿里之前趁着有空,简单总结了一下,希望有缘的年轻人看到能对你有所帮助,也希望大家都来喷一下我这个混子。 感悟: 任何行业想走到顶端都要付出超出常人的努力,it尤为明显。进来了就要趁早好好想一想,这是不是你要走的路。 我
为满足伸缩性,所需的架构模式包含: 分布式,这个前面有单独的章节进行了讲解,分布式是互联网时代的主旋律。 负载均衡,前面已经有讲解。 服务拆分,按照业务进行系统服务的拆分并单独部署。 为满足伸缩性,需要的支撑系统: 运维系统: 自动扩容,缩容 监控系统 监控流量,确定何时伸缩 为满足安全性,所需的架构模式包含: 数据加密,密码的加密存储
服务器等,从而共同完成工作任务。各种负载均衡的软硬件有很多,我们可以单独讲解一下。 配置中心,原来单一节点的配置,被类似zookeeper的多节点配置中心取代。 流量控制,流量控制是保证大流量下系统可用性的重要手段,当系统流量不足以支撑所有流量时,只保留合理的流量处理。其他流量直接丢弃,否则系统会被压垮,造成雪崩。 功能降级,另外大流量情况下,有些无关紧要的功能可以暂时降级,后期通过数据
本系统架构模式: 统一异常 统一异常处理是保证程序正确性的第一步,这是第一个架构模式。具体如何实现,详见前面的文章。 日志 日志也是保证程序正确的一大手段,虽然是在错误出现后,日志才会记录。但是日志是快速确认问题,并分析出隐藏问题的重要手段。 关键点 日志文件按照级别进行区分,将错误和普通调试日志分开 日志文件滚动方式,可以按天及按大小滚动,定时清理 日志级别可以实时调
架构的目标为了实现以下特性: 正确性 系统首先需要正确,运行稳定 可用性 软件系统对于用户的商业经营和管理来说极为重要,因此软件系统必须非常可靠,一般99.99%是一个比较基本的要求。 快速开发 互联网目前是一个快鱼吃慢鱼的时代,已经不是大鱼吃小鱼了。因为小鱼在一夜之间就长大了,把大鱼吃掉了。诺基亚就是明证,facebook就是明证。 良好体验 良好的体验对用户的吸引
经过这段时间的反思和整理,终于对架构有了一个较为明确的理解。架构是产品从无到有以及慢慢壮大过程中所需要的全部技术体系总称,架构过程: 配置、编码、测试、运维、监控分析、安全、运营等一系列技术体系的选型、取舍 技术选型基础上进行规划、设计、实现、迭代、制定相关规范 相关技术及规范运用到产品开发的整个过程中,并在产品迭代过程中对架构进行迭代优化 架构不止包含技术的框架,比如有人用
假定: 程序员都是闷骚的 程序员有独特的搞笑方式 程序员80%都不满于现状,需要发泄 程序员都有一点色 所以: 子龙左手青釭剑,右手亮银枪,跨下白龙马,一身白盔白甲,帅到爆炸!如今我们左手xmind,右手eclipse,uml在脚下,也是无比潇(ku)洒(bi) 他们是喜欢的 亚美蝶,揍我不行,揍我小舅子可以。 他们是喜欢的 老板说:哎呀,我们方向错了,我们重新搞一个
架构是什么?架构的目标是什么?如果解决这2个问题,可能我能更好的梳理杂乱的架构理论。经过2天的思考,总算有了一点眉目。我们从一个产品的本质来说,追本朔源,自上而下: 大概就是这样的,当然架构不止需要解决这些问题,本产品只是其中一个部分,要支撑一个web产品还需要依赖很多的外部公共系统,对这些系统整合也算作架构的范畴。 架构,又名软件架构,是有关软件整体结构与组件的抽
分布式算是软件界发展的一个里程碑,它开辟一个新的软件时代,其他的溢美之词我就不再乱说了。 分布式按照我的观点,应该分为有状态和无状态2种: 有状态 分布式数据库 分布式存储 无状态 分布式计算 分布式web系统 当然分布式尽量做成无状态的分布式,但是存储最终因为最终存储的是有状态的数据,所以不得不变的有状态。当然web系统也可以是有状态的,但是最好做成无
作为一个软件系统可用性是第一位的,如果一个系统不可用,你其他的地方做的再怎么好,然并卵。 一般什么情况下软件会不可用: 我方发生故障,导致系统不可用,当然会出现单机的不可用及n多机器群的全部不可用。 程序故障 功能错误、程序退出 系统故障 CPU超负荷、内存超负荷、网络超负荷 物理故障 机器死机 断电 断网 不可恢复故障 地震、海啸等等 客户方也会发生相同故障,
作为一个架构师,有些规则是必须要掌握的,这就想软件的公理,如果你学物理不知道牛顿定律,那就不要学了。在软件行业也有类似的东西,我称之为软件定律。例如: ACID,CAP,BASE ACID 传统数据库系统中,事务具有ACID 4个属性 (1)原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。 (2)一致性
异常为什么需要单独一节来讲解呢?因为异常是软件设计里一项需要架构者自己构思处理的一个特殊部分。一般的框架没有提供统一的处理方式,而且会被很多同学忘记处理,或者是比较粗糙处理掉。想一想有很多网站出错时,用户会看到一大段的英文异常,甚至执行的sql都包含在里面,你会不会觉得很不专业呢? 首先异常应该分类,确定异常分类至关重要,这是后期进行不同处理的基础: 业务异常,是用户在执行业
前面说完了前端和后端的封装,本节再单独讲解一下哪些地方需要前后结合。 AJAX的前后端结合: 定义统一的返回消息体,{isError:true/false,message:’需要返回的消息’,data:{返回的数据},postAction:{后续的动作}} 根据消息体的返回,进行不同类别的展示,例如:错误提示,加载页面片段,数据刷新,页面跳转,或者自定义后续处理 服务端能自动
要做一个好的开发框架并不是直接找一个现成的Spring就ok了,这个对于一般新手来说学习难度还是有点高。另外Spring还是一个通用性的框架,我们需要针对业务的定制化封装。我以java为例讲解一下后端需要做什么: 确定层数结构 parent common test dao service-common service web-common web parent统一引入的
读过很多代码,有些人写了5年以上的代码,但是代码烂到直接让人无从读起。有人写的代码让人读的赏心悦目,为什么人与人之间的差距这么大呢? 看来如何写好代码还是一件很值得一说的事情。 关键思想: 人写代码是用来给别人读的,而不是给机器执行的。写代码就应该像写小说一样,让人读的轻松愉快。 软件的生命周期中,维护周期占1半以上,所以不看避免要有人来改动你的代码 你如果更换工作
领域驱动设计简称DDD,很好的名字,先来普及一下相关的名词缩写: 测试驱动设计 TDD,行为驱动设计 BDD,面向对象设计 OOD,面向过程设计 OPD。 设计思路和方法是一项专门的技能,区别于设计模式,编程语言。UML是设计的工具,设计方法是设计的灵魂,而且设计方法并没有好坏之分。关键是你需要掌握各种设计方法,在做项目时信手拈来,才是真正的高手。为什么要讲领域驱动设计,因
uml是什么东西?统一建模语言,一门语言,是用来进行软件设计的一门语言。 其实一门语言的诞生并不伟大,让大多数人都使用才足够伟大。uml就是一门伟大的语言,因为目前软件设计的唯一语言就是它。 UML其实还是比较简单的,就那么几个图形,那么几种模式,但是因为他是唯一的语言,所以有设计能力的人都能很容易看懂你说的什么,这就是他的伟大之处。 我说一下在软件设计中最常用的几个
价值观和人生目标是gtd的最上层要素,如果你整个人生的价值观和目标都不清晰,后面的路会因为失去方向而走的比较艰辛。但好多人都不太清楚价值观和人生目标如何确定,这2个东西太抽象了。首先要先说一下价值观是什么? 心理学家发现我们会受到不同的事物所鼓舞和推动,这些动力往往归纳为:需要、兴趣、价值、信念及喜好。对部分人来说,这些动力根深蒂固,而一般认为这是由于我们成长中所接受的教育,以及
思维导图 你的第一本思维导图操作书 画出好成绩-通过思维导图提升分数 思维导图系列 知识管理 你的知识需要管理 面向对象 写给大家看的面向对象编程书 面向对象分析与设计 深入浅出面向对象分析与设计 软件设计 UML精粹 UML基础、案例与应用 Head First软件开发 领域驱动设计 写好代码 重构:改善既有代码的设计 代码大全 代码整洁之道
在投职和面试的过程中,雇主通常会查看求职者的两种技能:硬技能与软技能。 硬技能就是能够通过培训或可以容易量化的技能。硬技能包括下面这些: 熟练的外语能力 文凭或证书 打字速度 计算机程序编写能力 而软技能,则是较难量化的主观性技能,例如: 团队合作 沟通 时间管理 而且绝多数的日常软性技能都是可以跨领域迁移,硬技能有时候随着工作的变迁,就失去了价值。我也极为推崇软
性能优化是程序员的G点,一碰就会高潮!(小朋友不懂的不不要懂了) 但是我为啥这么晚才抛出这个命题,其实有人早就急不可待吧。我这么晚写是有这么晚写的理由的,其实性能优化,在做一个小的网站,根本没有什么卵用。一个流量小的网站,框架做好,架构做好,表结构设计好,根本没有太大的必要去优化,因为机器都闲着没有什么卵用,有时间不如把产品做好,吸引更多的人气。 其实我在到阿里之前,做过几
ppt进阶 写给大家看的PPT设计书 说服力 让你的PPT会说话 PPT,要你好看 别告诉我你懂PPT 时间管理 小强升职记 把时间当作朋友 高效能人士的七个习惯 技术类 head first java head first sql head first html css thinking in java effective java
java学习 head first java 高效学习 如何高效学习 学习之道 学习要像加勒比海盗 如何高效阅读 沟通 沟通的艺术 沟通:用故事产生共鸣 演讲之禅 60天完美口才打造计划 学习资料站 http://www.read.org.cn/ http://book.douban.com/
谦卑,永远保持谦卑。 热情,永远保持热情。 同行相轻在中国好像是一个惯例,互相看不起,互相贬低,也充斥了软件行业的每个角落。想成为一个架构师请先保持你的内心的谦卑,永远不要嘲笑或贬低任何一个人。因为当你嘲笑或者贬低一个人时,世界就给你关了一扇门。其实群体的意志才是最强大的,当你有一个团队,一般情况下团队的力量总是会比一个人要强大。所以要时刻想着如何激发整个团队的热
知识如何学习前面已经讲了2节,这节主要讲知识的整理和沉淀。 其实我之前也一直没有好好的思考过这个问题,今天在整理自己的wiz知识库的时候突发灵感,所以有了这一节。 其实知识获取的过程分为搜索->收集->整理->精化->应用->分享,前一部分跟时间管理的收集也很相近吧。知识获取的思路适用于有目的的知识收集和日常的备忘性的知识收集。当然你随机收集一
有人说架构师明明只需要做架构,干嘛要扯出来带团队,带团队不是项目经理或者CTO之类的管理人员干的事情吗? 其实这个是一个误区,架构师其实是一个全栈的特殊人物,应该项目开发的所有的环节和角色都有深入了解,尤其是带过团队对你的帮助会更大。那种只做架构,而且仅会做架构的架构师,是大公司畸形的产物,在我看来,不太接地气。大公司人员体系庞大,分工明确而且细致,技术只是负责技术就好了,管理自
evops是一个很高大上的名字,其实说的简单点就是开发和运维本身就是一个团队的,要干就一起把事情干好。谁出了问题,网站都不行。作为一个架构师,必须要devops,而且要知道如何推行devops。 首先要自动化,举个阿里的例子,阿里通过aone系统来实现半自动化部署: 开发人员开发代码先自测通过后,提交代码到git。 在aone中一键部署到日常环境。部署是自动化扫描依赖冲突,系
速读速记一直是很多人梦寐以求的技能,想象一下,别人看一本书2天,你看一本半天,而且记得比别人清楚,这是一件多么开心的事情。当然有人不相信有这样的技能的存在,我只能说呵呵。如果你看过记牌或者任意图像的记忆分辨,你会吓哭的。 我觉得我好像可以速读,但是速记练过一段时间,没有坚持下来,所以速记算是没有的。不过当时练习记牌,一副牌洗乱了,我能看2遍记下来。后来觉得对于记录数字比较有用,而
面向对象,是一个伟大的设计思想,应该是软件开发史上的一次革命。 当然理解面向对象也很难,有好多人用着面向对象的语言,写着面向过程的逻辑,而且一写就是好多年。但是有高手,用c照样可以写出很牛的面向对象的程序。面向对象其实是一种思考问题的方式,重点如下: 面向对象是用来反映显示世界的,而不是强行创造世界。 这句话,说起来简单,但是做起来很难。现实世界中你绝对不会把狗腿,按在一
很多人上了很多年学,读了很多年书,他们其中的很多人压根就没有用上这些知识,我就是其中的一员。当时我还是化学课代表,化学牛人,高三的化学卷,别人做1个半小时,我只需要半小时,而且顶多会错2个选择。然而并没有什么卵用,我发现上了大学之后,化学、物理统统交回去了。所以学过!=你的知识。 另外我还看过很多书,然而并没有什么卵用,都忘了。所以看过!=你的知识。 参加工作以来,我用过的
买菜、洗菜、切菜很多人都会,但是把几种菜混在一起做成一道可口的佳肴就不是一般人能掌握的。 今天就讲解一下如何学会做一道好菜。 举个例子,做网站,其实跟做菜一样。 先看菜谱,看需要哪些配料,做网站,当然需要html,css,js,java,mysql这些菜,当然还需要设计模式、面向对象、框架这些调料,eclipse这样的刀,另外还需要tomcat这样的锅。 磨刀 基本工具
人生没有理想,那和咸鱼有什么区别。 有了理想如何去实现,这就是gtd需要解决的问题。简单说一下gtd怎么做? 确定你的目标,如果不能确定长期目标,至少需要一个2年到3年的目标。 目标必须是可以衡量的,不能模棱两可。 目标必须符合你的价值观,如果确定是否符合价值观,假设这件事给你10万,让你不要继续做,你说滚。 针对你的目标,确定需要做的事情,脑子里想到的所有事情都放到
有很多人整天用电脑,但是碰到问题就不知所措,好像从来没有用过互联网一样。 互联网给了我们最多的知识,但是也给我了最大的诱惑,也给了我们最多的垃圾。如果迅速找到自己想要的知识,取其精华,弃其糟粕是一个非常有用的学问。还是举例子: 比如我要学习一门新的语言scala, 列出对自己帮助比较大的几种资料或途径 书籍 视频 别人学习的心得和经验 相关论坛和答疑群、博客,有疑问
《如何高效学习》,这本书的作者是scotthyoung,最知名是的1年内自学完成4年麻省理工学院计算机科学的33门课程,同时也写了一个学习方法的Blog,他使用费曼技巧来加强理解和学习。 费曼技巧有很多种理解,最简单的是: 拿张白纸; 在白纸顶部写上你想理解的某想法或某过程; 用你自己的话解释它,就像你在教给别人这个想法。 最要紧的是,对一个想法分而化之,虽然可能重复解释某
天地会总舵,陈近南给了韦小宝一本武功秘笈,韦小宝说:“嗯?这么大一本我看要练个把月啊!” 陈近南说:“这本只不过是绝世武功的目录,那边才是绝世武功的秘笈!” 这就是架构速成的秘笈目录 架构师速成1-前言 架构师速成2-概述 架构师速成2.1-论成功 架构师速成2.2-论成功 架构师速成3-开发者境界 架构师速成4-幼儿园 架构师速成4.1-幼儿园要学会如何学习 架构师速成4
阶段: 高中 学时:6-12个月 升学标准 掌握速读技能,能迅速吸收海量知识,取其精华,弃其糟粕。 学习你涉及知识的底层标准及协议,能够讲解标准和协议产生的原因。 搭建持续交付平台,能够持续自动化部署,devops。 能够带团队顺利完成一个任务的开发,团队有自己的规范、流程、风格。 进行性能测试。能够发现系统瓶颈,并进行调优。 经过初中的锻炼你已经有了做框架的能力,设计思路
阶段: 中学 学时:6-12个月 升学标准 学会如何思考,读每本书都能整理思维导图,能使用思维导图思考。 学会知识整理,使用知识管理工具整理自己的知识。 掌握设计模式,可以设计一套开发框架,使用此框架开发一个产品,而且新人也可以快速使用此框架进行开发。 掌握软件设计理念,有一套自己的设计、开发思路,并使用此思路完整的完成一个产品设计。 精通linux 中学自然要学习的东西更
很高兴你很快的进入了小学,小学的东西会让你更加的耀眼。 阶段: 小学 学时:2-3个月 升学标准 能自己制定目标及计划,get thing done。 可以轻松制作一个让你身旁人惊叹的ppt 能做一个简单的网站(或者客户端软件),数据能保存到数据库。 实践经验干货来了。 先说ppt吧,这个上一期已经讲了,如果你ppt做到出神入化,基本不需要做架构这么苦逼的事情了
为什么在这里插入这么一个看起来无比宏大的问题? 是想告诉你成功是什么。知识在整个人生中的作用。 成功是什么?这是一个很难定义的问题。有人说知足,有人说有钱,有人说有权。我自己对成功的定义是自我情感的满足和自我状态的认同,其实就是知足,而成功是通过自身的提升的达到的。 自身实力包含什么呢? 实力Map={ 素质list:行动、坚持、自信、坚
成为一名合格的架构师,需要经历菜鸟、码农、资深码农、项目经理、技术经理、架构师等一系列的过程。为了让大家通俗易懂,我把整个过程按照大家熟知的上学的顺序排了一下,从幼儿园-小学-中学-…一直到博士,至于博士后需要大家自己去实践和想象了。每个过程我都会进行统一的描述: 阶段:例如 幼儿园 需要做的事情:例如 学会一门编程语言 完成任务耗时:例如 2-5个月 升级标准:例如:能写出简单的