Browsed by
标签:缓存

代码,到底该如何分层,才能给人赏心悦目的感觉?

代码,到底该如何分层,才能给人赏心悦目的感觉?

閱讀本文約花費: 8 (分鐘) # 背景 说起应用分层,大部分人都会认为这个不是很简单嘛 就controller,service, mapper三层。看起来简单,很多人其实并没有把他们职责划分开,在很多代码中,controller做的逻辑比service还多,service往往当成透传了,这其实是很多人开发代码都没有注意到的地方,反正功能也能用,至于放哪无所谓呗。这样往往造成后面代码无法复用,层级关系混乱,对后续代码的维护非常麻烦。 的确在这些人眼中分层只是一个形式,前辈们的代码这么写的,其他项目代码这么写的,那么我也这么跟着写。但是在真正的团队开发中每个人的习惯都不同,写出来的代码必然带着自己的标签,有的人习惯controller写大量的业务逻辑,有的人习惯在service中之间调用远程服务,这样就导致了每个人的开发代码风格完全不同,后续其他人修改的时候,一看,我靠这个人写的代码和我平常的习惯完全不同,修改的时候到底是按着自己以前的习惯改,还是跟着前辈们走,这又是个艰难的选择,选择一旦有偏差,你的后辈又维护你的代码的时候,恐怕就要骂人了。 所以一个好的应用分层需要具备以下几点: 方便后续代码进行维护扩展; 分层的效果需要让整个团队都接受; 各个层职责边界清晰。 # 如何进行分层 1、阿里规范 在阿里的编码规范中约束的分层如下: 开放接口层:可直接封装 Service 方法暴露成 …

Read More Read More

由12306.CN谈谈网站性能技术

由12306.CN谈谈网站性能技术

閱讀本文約花費: 31 (分鐘) 12306.cn网站挂了,被全国人民骂了。我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题。因为仓促,而且完全基于本人有限的经验和了解,所以,如果有什么问题还请大家一起讨论和指正。(这又是一篇长文,只讨论性能问题,不讨论那些UI,用户体验,或是是否把支付和购票下单环节分开的功能性的东西) 业务 任何技术都离不开业务需求,所以,要说明性能问题,首先还是想先说说业务问题。 其一,有人可能把这个东西和QQ或是网游相比。但我觉得这两者是不一样的,网游和QQ在线或是登录时访问的更多的是用户自己的数据,而订票系统访问的是中心的票量数据,这是不一样的。不要觉得网游或是QQ能行你就以为这是一样的。网游和QQ 的后端负载相对于电子商务的系统还是简单。其二,有人说春节期间订火车的这个事好像网站的秒杀活动。的确很相似,但是如果你的思考不在表面的话,你会发现这也有些不一样。火车票这个事,一方面会伴随着大量的查询操作,更BT的是下单的时候需要对数据库很多的一致性的操作,一方面是从起点到终点各个分段票的一致性,另一方面,买的人路线、车次、时间选择有很多,会不停地改变下单方式。而秒杀,直接杀就好了,没有那么多查询和一致性的问题。另外,关于秒杀,完全可以做成只接受前N个用户的请求(完全不操作后端的任何数据, 仅仅只是对用户的下单操作log),这种业务,只需…

Read More Read More

阿里玄难:面向不确定性的软件设计几点思考

阿里玄难:面向不确定性的软件设计几点思考

閱讀本文約花費: 19 (分鐘) 在纷繁复杂的业务发展中,变化已成为了唯一的不变。如何保障基础设施的安全、高可用性,同时提供高效的创新支持?今天,阿里副总裁、业务平台事业部掌门人玄难,结合阿里巴巴业务平台建设和个人多年大型软件设计经验,提炼成几点思考,希望对大家的软件架构设计有所启发。 玄难 阿里副总裁 业务平台事业部掌门人 特别说明:本文中所说的软件都指代面向最终用户的偏业务的软件,不包含操作系统、中间件等系统软件。 1、软件发展的几个阶段 软件工具和信息化阶段:软件最早是为了数值计算,以工具的形态出现的。包括PC时代我们非常熟悉的Excel,Word这些好东西。以及典型的企业内部管理的信息系统,例如:企业流程审批、进销存管理系统等等。互联网服务阶段:随着PC互联网兴起,淘宝、QQ、Google、新浪这些全新的互联网服务逐步进入了我们的日常生活。社会基础设施阶段:随着移动互联网、IOT、人工智能的出现和高速发展,各种各样的软件进入社会经济生活的方方面面,软件之间相互连接,构成了一个纷繁复杂的生态系统,变成了不可或缺的社会基础设施。 随着软件形态的变化,过去非常高效的系统架构和组织形态遇到了全面的挑战。因为我们所处的环境已经从量变到质变,突破临界点,产生了本质的不同。 阿里巴巴就是这个过程中的典型代表。从过去单一的电商业务演变成了复杂的经济体,没有了确定性的业务边界,蓬勃发展的业务…

Read More Read More

阿里巴巴双十一千万级实时监控系统技术揭秘

阿里巴巴双十一千万级实时监控系统技术揭秘

閱讀本文約花費: 13 (分鐘) 本次分享主要介绍以下四方面: 时序业务全景TSDB 介绍核心技术总结展望 时序业务全景 从底层的机器监控到直面用户的应用,都离不开时序性的业务场景,而时序性的数据一般都由专业的时序数据库来存储分析,下面主要介绍 TSDB 覆盖的业务场景以及面临的挑战。 1.1 时序数据库覆盖场景 基础设施层:机柜、物理机、操作系统监控日志 基础运维:sunfire(集团统一监控、采集、报警系统)、阿里云监控、GOC(阿里全球应急调度指挥系统) 资源调度:集团内部调度系统、Kubernetes 集群管理:DBPaas(阿里所有数据库实例的监控和调度) 应用层:APM 场景下的各种应用 1.2 时序数据库面临的挑战 由于面临各个层级的不用场景,所以时序数据库也面临不同挑战: 应用层挑战:由于直面客户所以需要提供高频率、低延迟的查询olap 数据库本身特性:海量数据的聚合时序数据库特有的:发散时间线双十一大促:突然流量十倍以上增长 TSDB 介绍 2.1 TSDB 的发展及性能 TSDB 于 2016 年开始服役, 到目前为止参与了三次双十一大促,相比于 2017 年读写吞吐翻倍增长, 写入 TPS4000w,查询 2wQPS 覆盖集团 130+ 业务线及存储百亿的时间线。 2.2 TSDB 架构介绍 如上图,从左到右为数据的采集到展现的过程: 边缘计算:轻量可靠的计算…

Read More Read More

AWS Solution Architecture Associate 认证攻略

AWS Solution Architecture Associate 认证攻略

閱讀本文約花費: 55 (分鐘) AWS认证介绍 AWS Certified Solutions Architect 系列认证是亚马逊从2013年开始推出的对云计算架构师能力的官方认证。考试不仅考察应试者对AWS相关云服务的熟悉程度,题目也多来源于实际中要解决的问题,要求应试者有全面的架构设计经验和积累,所以含金量很高。在美国招聘网站glassdoor上,AWS solution architect的身价平均在10万美金以上,可见业界对这个认证的认可程度。 它在国内的认可程度如何呢?根据我和考试认证中心的工作人员聊天打听到,国内来考试的分两类人,一类是工作单位和亚马逊有合作关系,单位出钱要求通过。另一类是云计算这个行业的早起的鸟儿,他们想充实自己的职业技能,在云计算这个浪潮中能有一席之地。所以相对来说了解和报考的人还是少数。 不过想顺利通过这个考试并不容易。一方面考试全程英文阅读量大。另一方面复习资料缺乏,只能通过官方的FAQ文档和白皮书进行学习,自学效率非常低。对于初次接触AWS云服务认证的同学来说,不花2,3个月的时间认证准备,是很难通过的。就算作者身边那些有2,3年AWS云服务使用经验的架构师,想裸考通过,成功率也几乎为零。所以,打算通过这个考试,一定要认真对待,规划好时间充分准备。 关于AWS认证考试更多的介绍,大家还可以参考网上刘涛同学的文章http://www.csdn…

Read More Read More

兩年取得 AWS All-5 + BigData 認證的學習心得

兩年取得 AWS All-5 + BigData 認證的學習心得

閱讀本文約花費: 6 (分鐘) 上個月考過 AWS Solutions Architect-Professional,沈澱之後想做個學習紀錄與分享。想想從開始準備到現在一晃眼也兩年了,像讀了一個碩士班一樣… XD。若專心於取得認證的朋友們,一定能找到適合自己的方式與更快的節奏來完成這個目標。只是考試這類事情因每個人的起點、專長經歷、備考時間分配、完成動機不同,所以需走過的路也不同,以下分享希望對某些人能有所幫助。 個人工作背景 軟體公司的技術經理,開發與營運 Web/API 服務,對架構有制定的空間,故能將 AWS 適合的方案帶入工作範圍 考試動機 學習瞭解 Cloud-Native Best Practices 架構設計,工作本質上就在開發與協助 SaaS 服務多些能力證明以爭取工作上更多架構設計的影響力 完成日期與成績 Transcript for Chiang Hsien TaiCheck out my transcript to see all of my accomplishments.www.certmetrics.com 12/09, 2016. 87%. AWS Certified Solutions Architect — Associate02/21, 2017. 87%. AWS Certified Developer …

Read More Read More

浅谈VPC二三,秒懂秒透

浅谈VPC二三,秒懂秒透

閱讀本文約花費: 13 (分鐘) VPC全称是Virtual Private Cloud,翻译成中文是虚拟私有云。但是在有些场合也被翻译成私有网络或者专有网络等。这里其实就有些让人迷惑,VPC究竟是指云还是网络?答案是,VPC即是一种云,也是一种网络模式,不过应该从服务和技术的角度分别来看。 一、虚拟私有云 首先从服务的角度来看,VPC指的是一种云(Cloud),这与它的字面意思相符。对于基础架构服务(IaaS),云就是指资源池。你或许听过公有云(Public Cloud)、私有云(Private Cloud)、混合云(Hybrid Cloud)。不过,VPC不属于这三种云中任一种。这是一种运行在公有云上,将一部分公有云资源为某个用户隔离出来,给这个用户私有使用的资源的集合。VPC是这么一种云,它由公有云管理,运行在公共资源上,但是保证每个用户之间的资源是隔离,用户在使用的时候不受其他用户的影响,感觉像是在使用自己的私有云一样。 从这种意义上看,VPC不是网络,我们可以对比VPC和它一个字面上相近的概念:VPN(Virtual Private Network)。VPN在公共的网络资源上虚拟隔离出一个个用户网络,例如IPsec VPN可以是在互联网上构建连接用户私有网络的隧道,MPLS VPN更是直接在运营商的PE设备上划分隔离的VRF给不同的用户。从提供服务的角度来,说如果VPC指…

Read More Read More

Cloudfare Redis提权漏洞

Cloudfare Redis提权漏洞

閱讀本文約花費: 1 (分鐘) Cloudfare搞了个大事,这里顺便也提醒大家。千万不要单独评估一个安全漏洞的危害,只要它能干不应该干的事情,就要警惕。 我们前几天也上了一课,一个比特币挖矿程序利用Redis本地提权的漏洞,把我们一个小集群的缓存机器都搞掉了。虽然漏洞刚出的时候,大家还都在说跟自己没关系,我们的Redis都限制内网访问,但是架不住安全组设置错误,这些机器暴露给了其他阿里云用户,也就是说主要某个阿里云邻居用户被黑,他都可以通过扫描进入我们的系统。 问题发现的也很奇葩,这个病毒程序太霸道,它会直接把受影响的Redis权限改掉,导致前端无法访问,这触发了我们的主从自动切换,然后被管理员发现了。他要是偷偷运行,估计还可以潜伏好久(我可不是给他出主意 ) 大家要是感兴趣,这里有个人写过一个类似遭遇 O网页链接

Spring源码笔记之Bean加载之准备创建Bean

Spring源码笔记之Bean加载之准备创建Bean

閱讀本文約花費: 16 (分鐘) 我们知道从spring容器中获取单例bean时会先从缓存尝试获取,如果缓存中不存在已经加载的单例bean就需要从头开始bean的创建,而bean的创建过程是非常复杂的,本文就开始研究bean加载这部分的源码。 1. bean创建流程分析   在Spring中bean加载的逻辑是在getSingleton的重载方法中实现的: public Object getSingleton(String beanName, ObjectFactory<?> singletonFactory) { Assert.notNull(beanName, “‘beanName’ must not be null”); // 全局变量需要同步 synchronized (this.singletonObjects) { // 首先检查对应的bean是否已经加载过,因为singleton模式就是复用已创建的bean,所以这一步是必须的 Object singletonObject = this.singletonObjects.get(beanName); // 如果为空才可以进行singleton的bean的初始化 if (singletonObject == null) { if (this.singletonsCurrentlyInDestruction) …

Read More Read More

nginx使用手册+基本原理+优缺点

nginx使用手册+基本原理+优缺点

閱讀本文約花費: 4 (分鐘) 一、nginx优点 1.反向代理 1、正向代理: 客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。 server不知道client是谁 2、反向代理:客户端请求服务器,中间也是经过一个代理服务器,客户端访问代理服务器就好像访问目标服务器一样。同时代理服务器将请求转发到后端具体服务器。 客户端不知道自己具体访问的服务器是谁 3、总结 https://blog.csdn.net/wnvalentin/article/details/88171847 正向代理是对客户端的代理,由客户端设立,客户端了解代理服务器和目标服务器,但目标服务器不了解真正的客户端是谁;使用正向代理可达到 突破访问限制、提高访问速度、对服务器隐藏客户端IP等目的; 反向代理是对服务器的代理,由服务器设立,客户端不了解真正的服务器是谁,使用反向代理可达到负载均衡、保障服务端安全、对客户端隐藏服务器IP等目的。 2.负载均衡 集群平摊请求压力 负载均衡策略: 轮询 :平均访问(默认方式) upstream myserver{ ip_hash; server 192.168.17.129:8000; server 192.168.17….

Read More Read More