All posts by dotte

机器学习工程师必知的十大算法

毫无疑问,机器学习/人工智能的子领域在过去几年越来越受欢迎。目前大数据在科技行业已经炙手可热,而基于大量数据来进行预测或者得出建议的机器学习无疑是非常强大的。一些最常见的机器学习例子,比如Netflix的算法可以根据你以前看过的电影来进行电影推荐,而Amazon的算法则可以根据你以前买过的书来推荐书籍。

所以如果你想了解更多有关机器学习的内容,那么你该如何入门?对于我来说,我的入门课程是我在哥本哈根出国留学时参加的人工智能课。当时我的讲师是丹麦技术大学(Technical University of Denmark)的应用数学和计算机科学的全职教授,他的研究方向是逻辑与人工智能,侧重于使用逻辑学来对人性化的规划、推理和解决问题进行建模。这个课程包括对理论/核心概念的讨论和自己动手解决问题。我们使用的教材是AI经典之一:Peter Norvig的Artificial Intelligence—A Modern Approach(中文译本:《人工智能:一种现代的方法》),这本书主要讲了智能体、搜索解决问题、对抗搜索、概率论、多智能体系统、社会AI和AI的哲学/伦理/未来等等。在课程结束时,我们三个人的团队实现了一个简单的编程项目,也就是基于搜索的智能体解决虚拟环境中的运输任务问题。

在那门课程上我已经学到了很多知识,并决定继续学习相关的课题。在过去的几个星期里,我在旧金山参加了多次相关的技术讲座,涉及到深度学习、神经网络和数据结构,并且参加了一个有很多该领域的知名专家学者参加的机器学习会议。最重要的是,我在6月初参加了Udacity上的Intro to Machine Learning(机器学习入门)在线课程,前几天才完成。在这篇文章中,我想分享一下我从课程中学到的一些最常用的机器学习算法。

机器学习算法可以分为三大类:监督学习、无监督学习和强化学习。监督学习可用于一个特定的数据集(训练集)具有某一属性(标签),但是其他数据没有标签或者需要预测标签的情况。无监督学习可用于给定的没有标签的数据集(数据不是预分配好的),目的就是要找出数据间的潜在关系。强化学习位于这两者之间,每次预测都有一定形式的反馈,但是没有精确的标签或者错误信息。因为这是一个介绍课程,我没有学习过强化学习的相关内容,但是我希望以下10个关于监督学习和无监督学习的算法足以让你感兴趣。

监督学习

1.决策树(Decision Trees)

决策树是一个决策支持工具,它使用树形图或者决策模型以及可能性序列,包括偶然事件的结果、资源成本和效用。下图是其基本原理:

从业务决策的角度来看,决策树是人们必须了解的最少的是/否问题,这样才能评估大多数时候做出正确决策的概率。作为一种方法,它允许你以结构化和系统化的方式来解决问题,从而得出合乎逻辑的结论。

2.朴素贝叶斯分类(Naive Bayesian classification)

朴素贝叶斯分类器是一类简单的概率分类器,它基于贝叶斯定理和特征间的强大的(朴素的)独立假设。图中是贝叶斯公式,其中P(A|B)是后验概率,P(B|A)是似然,P(A)是类先验概率,P(B)是预测先验概率。

一些应用例子:

  • 判断垃圾邮件
  • 对新闻的类别进行分类,比如科技、政治、运动
  • 判断文本表达的感情是积极的还是消极的
  • 人脸识别

3.最小二乘法(Ordinary Least Squares Regression)

如果你懂统计学的话,你可能以前听说过线性回归。最小二乘法是一种计算线性回归的方法。你可以将线性回归看做通过一组点来拟合一条直线。实现这个有很多种方法,“最小二乘法”就像这样:你可以画一条直线,然后对于每一个数据点,计算每个点到直线的垂直距离,然后把它们加起来,那么最后得到的拟合直线就是距离和尽可能小的直线。

线性指的是你用来拟合数据的模型,而最小二乘法指的是你最小化的误差度量。

4.逻辑回归(Logistic Regression)

逻辑回归是一个强大的统计学方法,它可以用一个或多个解释变量来表示一个二项式结果。它通过使用逻辑函数来估计概率,从而衡量类别依赖变量和一个或多个独立变量之间的关系,后者服从累计逻辑分布。

总的来说,逻辑回归可以用于以下几个真实应用场景:

  • 信用评分
  • 计算营销活动的成功率
  • 预测某个产品的收入
  • 特定的某一天是否会发生地震

5.支持向量机(Support Vector Machine,SVM)

SVM是二进制分类算法。给定N维坐标下两种类型的点,SVM生成(N-1)维的超平面来将这些点分成两组。假设你在平面上有两种类型的可以线性分离的点,SVM将找到一条直线,将这些点分成两种类型,并且这条直线尽可能远离所有这些点。

从规模上看,使用SVM(经过适当的修改)解决的一些最大的问题包括显示广告、人类剪切位点识别(human splice site recognition)、基于图像的性别检测,大规模图像分类……

6.集成方法(Ensemble methods)

集成方法是学习算法,它通过构建一组分类器,然后通过它们的预测结果进行加权投票来对新的数据点进行分类。原始的集成方法是贝叶斯平均,但是最近的算法包括纠错输出编码、Bagging和Boosting。

那么集成方法如何工作?并且为什么它们要优于单个模型?

  • 它们平均了单个模型的偏差:如果你将民主党的民意调查和共和党的民意调查在一起平均化,那么你将得到一个均衡的结果,不偏向任何一方。
  • 它们减少了方差:一组模型的总体意见比其中任何一个模型的单一意见更加统一。在金融领域,这就是所谓的多元化,有许多股票的组合比一个单独的股票的不确定性更少,这也为什么你的模型在数据多的情况下会更好的原因。
  • 它们不太可能过拟合:如果你有单个的模型没有过拟合,那么把这些模型的预测简单结合起来(平均、加权平均、逻辑回归),那么最后得到的模型也不会过拟合。

无监督学习

7.聚类算法(Clustering Algorithms)

聚类是将一系列对象分组的任务,目标是使相同组(集群)中的对象之间比其他组的对象更相似。

每一种聚类算法都不相同,下面是一些例子:

  • 基于质心的算法
  • 基于连接的算法
  • 基于密度的算法
  • 概率
  • 降维
  • 神经网络/深度学习

8.主成分分析(Principal Component Analysis,PCA)

PCA是一个统计学过程,它通过使用正交变换将一组可能存在相关性的变量的观测值转换为一组线性不相关的变量的值,转换后的变量就是所谓的主分量。

PCA的一些应用包括压缩、简化数据便于学习、可视化等。请注意,领域知识在选择是否继续使用PCA时非常重要。 数据嘈杂的情况(PCA的所有成分具有很高的方差)并不适用。

9.奇异值分解(Singular Value Decomposition,SVD)

在线性代数中,SVD是复杂矩阵的因式分解。对于给定的m * n矩阵M,存在分解使得M=UΣV,其中U和V是酉矩阵,Σ是对角矩阵。

实际上,PCA是SVD的一个简单应用。在计算机视觉中,第一个人脸识别算法使用PCA和SVD来将面部表示为“特征面”的线性组合,进行降维,然后通过简单的方法将面部匹配到身份,虽然现代方法更复杂,但很多方面仍然依赖于类似的技术。

10.独立成分分析(Independent Component Analysis,ICA)

ICA是一种统计技术,主要用于揭示随机变量、测量值或信号集中的隐藏因素。ICA对观测到的多变量数据定义了一个生成模型,这通常是作为样本的一个大的数据库。在模型中,假设数据变量由一些未知的潜在变量线性混合,混合方式也是未知的。潜在变量被假定为非高斯分布并且相互独立,它们被称为观测数据的独立分量。

ICA与PCA有关,但是当这些经典方法完全失效时,它是一种更强大的技术,能够找出源的潜在因素。 其应用包括数字图像、文档数据库、经济指标和心理测量。

现在运用你对这些算法的理解去创造机器学习应用,为世界各地的人们带来更好的体验吧。

查看英文原文:The 10 Algorithms Machine Learning Engineers Need to Know

from:http://www.infoq.com/cn/articles/10-algorithms-machine-learning-engineers-need-to-know

程序员的这些福利你都有享受到了吗

HR是专门负责谈薪资的, 当我们跟HR讨价还价的时候, HR会介绍公司有的福利,而回避公司没有的福利。 作为程序员,我们一定要对跟我们利益息息相关的各种福利细节了如指掌, 各项福利都要跟HR询问清楚,才能比较公司之间的总体福利。 同时还需要掌握些技巧,别让我们的利益会受到损害。

眼下正是年后跳槽的黄金时期,园里的大牛小牛拿了去年的年终奖后,有些肯定想给自己加点工资。园里的大牛小牛都是我们中国软件业的精英,跳槽的时候 肯定手里握着好几个Offer, 不知道选择哪家。先不管工作的内容和前途,就工作本身的待遇,我们还是可以比较的。 HR是专门负责谈薪资的, 当我们跟HR讨价还价的时候, HR会介绍公司有的福利,而回避公司没有的福利。 作为程序员,我们一定要对跟我们利益息息相关的各种福利细节了如指掌, 各项福利都要跟HR询问清楚,才能比较公司之间的总体福利。 同时还需要掌握些技巧,别让我们的利益会受到损害。

工资每个月多少

工资是需要谈的,我见过很多优秀的人工资很低,就是因为他们不懂谈工资。公司之所以要求薪资保密,就是说明同等职位的工资存在较大的差异

入职时候的工资可能在很长的一段时间内都不会变, 不要指望你入职后,再涨工资。

例如:公司招了两个程序员,程序员A 5000,程序B 8000,用了一年。感觉两个人水平差不多,工资还是那样维持着。如果非要公司做解释,公司会说当初就是那么谈的。

年底奖金有多少

我们在计算自己的年薪都是用 (月工资*一年发多少个月)来算的, 年底的奖金非常重要, 这个一定要跟HR问清楚。 有奖金和没奖金的收入区别非常大, 没奖金的话,你过年怎么过?

一般的公司都会在1月份的时候,农历新年之前发一个月的奖金。 好的公司会发两个月甚至更多, 一些变态的公司竟然发十几个月工资的奖金。

那些年底没奖金的公司,最好别去。

情景对话:

程序员A说: “请问贵公司,年底发几个月的年终奖呢?”

HR说: “奖金是跟绩效挂钩的, 有的人只能拿1个月,有的人能拿五六个月的”。

程序员A说: ”那请问我这个职位,表现一般的, 年底一般能拿多少个月呢?”

HR说: “大概一个月吧”

程序员A说: “这样啊, 明白了”

程序员A心里想: “年终奖才一个月,我还以为有几个月,差点被她忽悠了”。

股票期权

上市公司可能会给员工股票,这是个好东西啊,很多人因为这个发财。

试用期几个月,以及试用期工资多少

很多大公司对试用期几个月,以及试用期工资是多少,有着明文规定, 不能谈的。

有些小公司是可以谈的。

试用期最好不超过3个月,试用期的工资应该和转正后的工资一样, 而且试用期内其他福利也应该和转正后一样。

试用期如果是6个月会有比较大风险

1. 试用期被裁。 公司被收购,或者你所在的项目缩减,都很有可能造成试用期被裁。按照法律规定,公司只需要提前3天通知你, 就可以了。不需要给你支付任何赔偿金。 这时候你会直接失业, 一下子陷入困境。

2. 拿不到年终奖。 假如你是7月15日入职,那么1月15日你才转正。 公司在1月5日的时候发年终奖,而你还在试用期,就没有权利获得年终奖。

住房公积金基数是多少,是否有补充住房公积金

首先大家要知道。 住房公积金基数,社保基数,还有你纳税的基数。这三个基数是有可能不一样的。

比如你的工资是8000,你的公积金可能按3000的基数交, 而你的社保可能按5000来交。

在正规的公司,公积金基数和社保基数都是以你的工资基数来交的。

住房公积金在我们买房子的时候用来贷款和还贷款的,所以对大部分人都是有用的。

所以住房公积金是越高越好, 如果有补充公积金就更好了

社保基数多少

社保是指养老保险,医疗保险,失业保险,生育保险,工伤保险。 对于外地人来说,这些纯粹是剥削人的。你听说过有人拿过失业保险的赔偿么?交了这么多年的养老保险,以后打回原籍,一点都拿不到退休金。

社保基数越低越好

纳税基数是多少,是否有避税措施

辛辛苦苦的赚来工资,很大一部分被别人拿走了。

纳税很难避免的,还没发工资就被扣了。 不过听说过有些公司可以拿发票去顶税。

入职日期

入职日期最好是年后2月到4月. 好处在于

1. 机会比较多,行情好

2. 已经拿了去年的年终奖,

3. 年过完了,年假也休得差不多了。

4. 在心态上, 期望新的一年有个新的开始。

5. 如果3月入职, 到了年底1月份,你共工作10个月,你能拿10/12的奖金

公司加薪的制度

大部分人都是靠跳槽来加薪, 如果公司的每年加薪幅度有10%以上, 就不用老跳槽了

问清楚公司的加薪制度,公司每年有几次的加薪机会,平均加薪幅度有多大,在什么月份加薪.

商业医疗保险

如果公司给员工购买了商业医疗保险, 员工去看病,只要药品和治疗属于医保范围之类,100%报销,包括门诊和住院。 子女的医疗费用也能报销50%.。 女员工生孩子的费用也可以全报销。

案例1:

小王的公司给员工购买了商业医疗保险。 一天,小王感冒了,带着上海医保卡来到三甲医院看病。 医生开了400元的消炎药。 小王用医保卡付了400元。 小王把发票交给公司去报销。 最后公司将400元现金交给小王。 通过商业医疗保险,小王看病一分钱都没花,而且把医保卡中的钱,变成了手里的现金。

案例2:

老李的公司给员工购买了商业医疗保险。 有次小李的儿子生病住院,花了3000元。小李先用社会保险报销了1500元。 剩下的1500交给公司去商业医疗保险报销。 通过商业医疗报销。 老李儿子的医药费全都报销了,自己一分钱都不用拿出来。

案例3:

张小姐的公司给员工购买了商业医疗保险。 张小姐前段时间破腹产,花了8000多元。 还好有商业保险,全都报销了。 因为是独生子女, 商业医疗报销还奖励了1千元.

通过这几个案例,我们可以看出商业医疗保险是个很好的福利。

年假多少天

按国家法律规定,满一年后有5天年假。 所以很多一般的公司都是按这个来的, 实在是年假太少了(满一年才有5天年假)。

年假太少非常不爽,过年回老家都没假,平常要是有什么事。没年假了说不定还要请事假(扣工资的)

有些外企,第一年10天年假, 工作满3年有15天年假。 而且是入职就有年假, 不用满一年。

带薪病假多少天

带薪病假就是:指跟公司请病假(不需要开病假单),不扣工资的。 这个福利很爽的哦

一般外企会有这个福利。 这带薪病假跟年假差不多, 只不过带薪病假一般不能连续请几天。

案例1:

小志计划周三带女朋友去杭州玩,行程早就安排好了。 到了周三早上,小志给他领导打电话,说他女朋友身体不舒服,需要请一天病假。 领导说: “好的,你好好照顾你女朋友吧”. 然后小志高高兴兴陪女朋友在杭州玩,不用担心扣工资。

每年旅游机会

小福利, 出国旅游才是较大的福利,

有无出国的机会

能出国是很多人考虑的因素,有海外工作经验会对自己的职业生涯有很大的帮助。

稳定性

现在虽不是技术牛人,就是正在成为技术牛人的人,不担心找不到工作。就算碰到裁员,拿了赔偿金后,还能迅速找到更好的工作。

一般女生比较注重稳定性。

过节的福利

小福利,不用考虑,比如端午节发个粽子, 中秋节发个月饼票

培训机会

有没有英语培训,或者技术培训。

健身补助,饭补,交通补助

可遇不可求。

企业文化和工作氛围

最怕碰到那种有办公室政治的公司了,同事之间勾心斗角,拉帮结派,排挤新人,搞得乌烟瘴气。

大家开开心心在一起工作多好,何必搞这么多名堂呢?

喜欢领导和同事都很Nice的公司。

上班的路程

当然是公司离住所越近越好,谁都不想早上挤地铁挤公交。1个多小时下来,赶到公司歇口气才能缓过来

定期的体育活动

健康的重要性不言而喻,大部分程序员的身体都处于亚健康的姿态,坐在电脑面前一坐就是一天。除了休息和健康的饮食外,运动是我们保持健康的唯一的方法。

去健身房办卡很难坚持,很多人办了卡只去过一两次,如果公司有定期的体育活动,比如篮球,羽毛球。我们就很容易坚持。

最后算算到手能拿多少

每个月拿到手的,才是你真正的工资。不要把税前的工资当成是你的工资。

from:http://www.techug.com/post/programmer-employee-benefit.html

锦绣江山华北版年票

华北/山西版专属景区游览指南:

备注:本版年卡编号1703,专属景区仅供本版使用,并可畅游本手册和网上新增的所有全国通用景区。

1. 沧州吴桥杂技大世界
4A级杂技旅游主题公园,尽情欣赏各具特色的杂技、马戏、戏法、气功等艺术表演。被誉为“天下杂技第一乡”。
票价:160元(旅行社及10人以上团队无效)
待遇:2017年6月26日-6月30日五天内免门票一人次,免票期间不限地区在验票口进门。其余时间优惠到100元,优惠不含沧州、德州、衡水三市居民,凭身份证到吴桥红牡丹宾馆票务中心办理。
地址:沧州市吴桥县京福路1号
提前预约电话:18733080111

2. 石家庄沕沕水风景区
4A级旅游区,面积11.5平方公里,集奇峰、峡谷、古寺、溶洞、瀑布、龛棺、原始森林、观赏植被及红色旅游和远古文化与一体于一体,品味高雅,风情浓郁,堪称太行一绝。早在明清时代,即为平山“八大胜景”之一,素享“沕沕水瀑布天上降”的盛誉。典型的喀斯特岩溶泉,半山沕沕涌出,四季不竭,湖潭沿绝壁飞落,形成落差93米45米等多级瀑布。
票价:65元(第二次入园优惠到50元)
待遇:2017年2月1日-28日、7月1日-7月30日内免门票一人次,其余时间无效。
地址:石家庄市平山县沕沕水村
电话:0311-87036225

3. 石家庄西苑温泉享水湾
4A级景区,千年温泉泡汤配方,是集休闲度假、温泉理疗、水上娱乐、生态旅游和食、住、娱、购配套于一体的大型综合性旅游度假区。
票价:168元(含水上乐园)
待遇:2017年6月1日-6月30日内免门票一人次,旅行社及团队无效。其余时间优惠到100元
地址:石家庄平山县温塘镇西苑温泉度假村
电话:0311-82813166

4. 邯郸娲皇宫5A景区
我国五大祭祖圣地之一,是神话传说中女娲抟土造人、炼石补天的地方,被誉为“华夏祖庙”。
门票:80元
待遇:2017年7月1日-8月31日内免门票不限次,其余时间优惠到70元
地址:邯郸市涉县索堡镇东
电话:0310-3922355

5. 邢台崆山白云洞
含崆山白云洞和天台山两大景点。白云洞形成于5亿年前的中寒武纪,是全球同纬度最大的溶洞,洞内四季恒温17℃,有“人间”、“天堂”、“地府”、“龙宫”、“迷宫”五个洞庭,被誉为“世界喀斯特风景洞穴博览园”。
票价:120元(乘坐区间车另收费,16:30停止验票)
待遇:6月21日至6月30日内免门票一次,旅行社及团队无效,其余时间无效。
地址:邢台临城县西竖镇山南头村东
电话:0319-7098889

6. 邢台乐达热带雨林水上世界
邢台最大的水上娱乐场所,集娱乐、休闲、餐饮为一体,室内四季恒温。
票价:138元(旅行社及10人以上团队无效)
待遇:2017年6月1日-6月30日内免门票一人次,其余时间优惠到60元。
地址:邢台市桥西区邢州大道2232号
电话:0319-3132666、3131666

7. 唐山景忠山风景区
4A景区,自然风景优美,苍松蔽日,峡谷清幽,被清康熙大帝封为“天下名山”,并御题“名山初步”、“灵山秀色”匾。
票价:70元
待遇:免门票一人次(不含庙会5月9日-14日)
地址:唐山迁西县三屯营镇,京沈高速丰润下到迁西
电话:0315-5837999

8. 唐山山叶口风景区
4A景区,有距今约30多亿年太古时期形成的古老片麻岩,堪称中国远古海底世界奇观第一村。
票价:50元(4月-10月开放,具体以景区公告为准)
待遇:免门票不限次,团队无效
地址:唐山迁安市大五里乡山叶口村
电话:0315-7088880

9. 秦皇岛昌黎国际滑沙中心
4A景区,在中国最美的八大海岸之一的黄金海岸上,沿海岸形成了世所罕见的巨大沙丘,景色极壮观。
票价:80元
待遇:2017年6月1日-6月30日免门票一人次,其余时间半价优惠
地址:秦皇岛昌黎黄金海岸沿海路
电话:0335-2081340

10. 太原台骀山滑世界
以“清凉太原、美丽龙城”为主题,打造了台骀山文化园区、2400平米的四季彩色冰雕艺术馆,世界之最的天下第一碉堡群、四大地质博物馆。
票价:88元(仅限冰雕馆,大衣自费,不含其他游乐费用)
待遇:2017年7月1日-7月31日内免门票不限次,其余时间无效
地址:太原市迎泽区郝庄镇小山沟村
电话:0351-5608111

11. 晋中三晋乐园
山西首个大型主题乐园,集国际化、现代化、主题化为一体。乐园占地面积12.7万平方米,分别由罗马假日、玛雅文明、天使乐园、梦想王国四个主题区组成,拥有百米摩天轮、六环过山车、双龙出海、高空飞翔等大型刺激性游乐项目。
门票:160元
待遇:2017年6月19日-6月23日内免门票一人次,其余时间通票优惠到135元。
地址:晋中市榆次区安宁东街与东外环百草坡植物园西北角
电话:0354-2614666

12. 晋中榆次老城
晋商旅游黄金线路的起点。隋开皇二年修筑,迄今已有1400年历史。古建筑群和园林建筑面积六十万平方米,气势雄伟;县衙、城隍庙等八大主要景点各具特色;中国民间民俗艺术表演多姿多彩,50余部影视剧在此取景拍摄。
票价:60元(旅行社无效,景区门口严禁销售年票)
待遇:7月1日至12月30日免门票不限次(不含十一假期),其余时间8折优惠。
地址:晋中市榆次区府兴路225号
电话:0354-8500003、3296800

13. 运城五老峰风景区
4A景区,具有雄、险、奇、秀、仙之特点,北方道教全真派的发祥地,有”晋北拜佛五台山,晋南问道五老峰”的美誉。
票价:70元(需另购小交通,冬季防火期间禁用)
待遇:免门票不限次(不含清明、五一、十一假期)
地址:运城市永济市虞乡镇
电话:0359-8069588

常逢周末即临假期,不定哪天出门
一张年票,万分情意,能为您的家庭和单位带来精彩!
一张年票,万元大礼,24省160市景区全年尽览!

from:http://www.365-china.cn/np2017/huabeiban.asp

zookeeper + dubbo+ spring boot

构建 Zookeeper + Dubbo + Spring Boot 的分布式调用项目(一)

构建 Zookeeper + Dubbo + Spring Boot 的分布式调用项目(二)

zookeeper + dubbo + spring boot

基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构 (配置)

spring boot集成dubbo

大型分布式网站术语分析

1. I/O优化

  1. 增加缓存,减少磁盘的访问次数。
  2. 优化磁盘的管理系统,设计最优的磁盘方式策略,以及磁盘的寻址策略,这是在底层操作系统层面考虑的。
  3. 设计合理的磁盘存储数据块,以及访问这些数据库的策略,这是在应用层面考虑的。例如,我们可以给存放的数据设计索引,通过寻址索引来加快和减少磁盘的访问量,还可以采用异步和非阻塞的方式加快磁盘的访问速度。
  4. 应用合理的RAID策略提升磁盘I/O。

2. Web前端调优

  1. 减少网络交互的次数(多次请求合并)
  2. 减少网络传输数据量的大小(压缩)
  3. 尽量减少编码(尽量提前将字符转化为字节,或者减少从字符到字节的转化过程。)
  4. 使用浏览器缓存
  5. 减少Cookie传输
  6. 合理布局页面
  7. 使用页面压缩
  8. 延迟加载页面
  9. CSS在最上面,JS在最下面
  10. CDN
  11. 反向代理
  12. 页面静态化
  13. 异地部署

3.服务降级(自动优雅降级)

拒绝服务和关闭服务

4.幂等性设计

有些服务天然具有幂等性,比如讲用户性别设置为男性,不管设置多少次,结果都一样。但是对转账交易等操作,问题就会比较复杂,需要通过交易编号等信息进行服务调用有效性校验,只有有效的操作才能继续执行。

(注:幂等性是系统的接口对外一种承诺(而不是实现), 承诺只要调用接口成功, 外部多次调用对系统的影响是一致的. 声明为幂等的接口会认为外部调用失败是常态, 并且失败之后必然会有重试.)

5.失效转移

若数据服务器集群中任何一台服务器宕机,那么应用程序针对这台服务器的所有读写操作都需要重新路由到其他服务器,保证数据访问不会失败,这个过程叫失效转移。
失效转移包括:失效确认(心跳检测和应用程序访问失败报告)、访问转移、数据恢复。
失效转移保证当一个数据副本不可访问时,可以快速切换访问数据的其他副本,保证系统可用。

6.性能优化

根据网站分层架构,性能优化可分为:web前端性能优化、应用服务器性能优化、存储服务器性能优化。

  1. web前端性能优化
    • 浏览器访问优化:减少http请求;使用浏览器缓存;启用压缩;css放在页面最上面、javaScript放在页面最下面;减少Cookie传输
    • CDN加速
    • 反向代理
  2. 应用服务器性能优化
    • 分布式缓存(Redis等)
    • 异步操作(消息队列)
    • 使用集群(负载均衡)
    • 代码优化
  3. 存储性能优化
    • 机械硬盘vs固态硬盘
    • B+树 vs LSM树
    • RAID vs HDFS

7. 代码优化

  • 多线程(Q:怎么确保线程安全?无锁机制有哪些?)
  • 资源复用(单例模式,连接池,线程池)
  • 数据结构
  • 垃圾回收

8. 负载均衡

  • HTTP重定向负载均衡
    当用户发来请求的时候,Web服务器通过修改HTTP响应头中的Location标记来返回一个新的url,然后浏览器再继续请求这个新url,实际上就是页面重定向。通过重定向,来达到“负载均衡”的目标。例如,我们在下载PHP源码包的时候,点击下载链接时,为了解决不同国家和地域下载速度的问题,它会返回一个离我们近的下载地址。重定向的HTTP返回码是302。
    优点:比较简单。
    缺点:浏览器需要两次请求服务器才能完成一次访问,性能较差。重定向服务自身的处理能力有可能成为瓶颈,整个集群的伸缩性国模有限;使用HTTP302响应码重定向,有可能使搜索引擎判断为SEO作弊,降低搜索排名。
  • DNS域名解析负载均衡
    DNS(Domain Name System)负责域名解析的服务,域名url实际上是服务器的别名,实际映射是一个IP地址,解析过程,就是DNS完成域名到IP的映射。而一个域名是可以配置成对应多个IP的。因此,DNS也就可以作为负载均衡服务。
    事实上,大型网站总是部分使用DNS域名解析,利用域名解析作为第一级负载均衡手段,即域名解析得到的一组服务器并不是实际提供Web服务的物理服务器,而是同样提供负载均衡服务的内部服务器,这组内部负载均衡服务器再进行负载均衡,将请求分发到真是的Web服务器上。
    优点:将负载均衡的工作转交给DNS,省掉了网站管理维护负载均衡服务器的麻烦,同时许多DNS还支持基于地理位置的域名解析,即会将域名解析成举例用户地理最近的一个服务器地址,这样可以加快用户访问速度,改善性能。
    缺点:不能自由定义规则,而且变更被映射的IP或者机器故障时很麻烦,还存在DNS生效延迟的问题。而且DNS负载均衡的控制权在域名服务商那里,网站无法对其做更多改善和更强大的管理。
  • 反向代理负载均衡
    反向代理服务可以缓存资源以改善网站性能。实际上,在部署位置上,反向代理服务器处于Web服务器前面(这样才可能缓存Web相应,加速访问),这个位置也正好是负载均衡服务器的位置,所以大多数反向代理服务器同时提供负载均衡的功能,管理一组Web服务器,将请求根据负载均衡算法转发到不同的Web服务器上。Web服务器处理完成的响应也需要通过反向代理服务器返回给用户。由于web服务器不直接对外提供访问,因此Web服务器不需要使用外部ip地址,而反向代理服务器则需要配置双网卡和内部外部两套IP地址。
    优点:和反向代理服务器功能集成在一起,部署简单。
    缺点:反向代理服务器是所有请求和响应的中转站,其性能可能会成为瓶颈。
  • LVS-NAT:修改IP地址
  • LVS-TUN: 一个IP报文封装在另一个IP报文的技术。
  • LVS-DR:将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。

9.缓存

缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段,现在CPU越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。大型网站架构设计在很多方面都使用了缓存设计。

  • CDN: 及内容分发网络,部署在距离终端用户最近的网络服务商,用户的网络请求总是先到达他的网络服务商哪里,在这里缓存网站的一些静态资源(较少变化的数据),可以就近以最快速度返回给用户,如视频网站和门户网站会将用户访问量大的热点内容缓存在CDN中。
  • 反向代理:反向代理属于网站前端架构的一部分,部署在网站的前端,当用户请求到达网站的数据中心时,最先访问到的就是反向代理服务器,这里缓存网站的静态资源,无需将请求继续转发给应用服务器就能返回给用户。
  • 本地缓存:在应用服务器本地缓存着热点数据,应用程序可以在本机内存中直接访问数据,而无需访问数据库。
  • 分布式缓存:大型网站的数据量非常庞大,即使只缓存一小部分,需要的内存空间也不是单机能承受的,所以除了本地缓存,还需要分布式缓存,将数据缓存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据。

使用缓存有两个前提条件,一是数据访问热点不均衡,某些数据会被更频繁的访问,这些数据应该放在缓存中;二是数据在某个时间段内有效,不会很快过期,否则缓存的数据就会因已经失效而产生脏读,影响结果的正确性。网站应用中,缓存处理可以加快数据访问速度,还可以减轻后端应用和数据存储的负载压力,这一点对网站数据库架构至关重要,网站数据库几乎都是按照有缓存的前提进行负载能力设计的。

10. 负载均衡算法

轮询 Round Robin
加强轮询 Weight Round Robin
随机 Random
加强随机 Weight Random
最少连接 Least Connections
加强最少连接
源地址散列 Hash
其他算法

  • 最快算法(Fastest):传递连接给那些响应最快的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。
  • 观察算法(Observed):连接数目和响应时间以这两项的最佳平衡为依据为新的请求选择服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。
  • 预测算法(Predictive):BIG-IP利用收集到的服务器当前的性能指标,进行预测分析,选择一台服务器在下一个时间片内,其性能将达到最佳的服务器相应用户的请求。(被BIG-IP 进行检测)
  • 动态性能分配算法(Dynamic Ratio-APM):BIG-IP 收集到的应用程序和应用服务器的各项性能参数,动态调整流量分配。
  • 动态服务器补充算法(Dynamic Server Act.):当主服务器群中因故障导致数量减少时,动态地将备份服务器补充至主服务器群。
  • 服务质量算法(QoS):按不同的优先级对数据流进行分配。
  • 服务类型算法(ToS): 按不同的服务类型(在Type of Field中标识)负载均衡对数据流进行分配。
  • 规则模式算法:针对不同的数据流设置导向规则,用户可自行

11. 扩展性和伸缩性的区别

扩展性:指对现有系统影响最小的情况下,系统功能可持续扩展或替身的能力。表现在系统基础设施稳定不需要经常变更,应用之间较少依赖和耦合,对需求变更可以敏捷响应。它是系统架构设计层面的开闭原则(对扩展开放,对修改关闭),架构设计考虑未来功能扩展,当系统增加新功能时,不需要对现有系统的结构和代码进行修改。

衡量网站架构扩展性好坏的主要标准就是在网站增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或者很少改动既有业务功能就可以上线新产品。不同产品之间是否很少耦合,一个产品改动对其他产品无影响,其他产品和功能不需要受牵连进行改动。

伸缩性:所谓网站的伸缩性指是不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力。

指系统能够增加(减少)自身资源规模的方式增强(减少)自己计算处理事务的能力。如果这种增减是成比例的,就被称作线性伸缩性。在网站架构中,通常指利用集群的方式增加服务器数量、提高系统的整体事务吞吐能力。

衡量架构伸缩性的主要标准就是可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后是否可以提供和原来服务无差别的服务、集群中的可容纳的总的服务器数量是否有限制。

12.分布式缓存的一致性hash

具体算法过程:先构造一个长度为2^32的整数环(这个环被称作一致性Hash环)根据节点名称的Hash值(其分布范围为[0,2^32 – 1])将缓存服务器阶段设置在这个Hash环上。然后根据需要缓存的数据的Key值计算得到Hash值(其分布范围也同样为[0,2^32 – 1]),然后在Hash环上顺时针查找举例这个KEY的hash值最近的缓存服务器节点,完成KEY到服务器的Hash映射查找。

优化策略:将每台物理服务器虚拟为一组虚拟缓存服务器,将虚拟服务器的Hash值放置在Hash环上,key在换上先找到虚拟服务器节点,再得到物理服务器的信息。

一台物理服务器设置多少个虚拟服务器节点合适呢?经验值:150。

13. 网络安全

  1. XSS攻击
    跨站点脚本攻击(Cross Site Script),指黑客通过篡改网页,注入恶意的HTML脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。
    防范手段:消毒(XSS攻击者一般都是通过在请求中嵌入恶意脚本大道攻击的目的,这些脚本是一般用户输入中不使用的,如果进行过滤和消毒处理,即对某些html危险字符转移,如“>”转译为“& gt;”);HttpOnly(防止XSS攻击者窃取Cookie).
  2. 注入攻击:SQL注入和OS注入
    SQL防范:预编译语句PreparedStatement; ORM;避免密码明文存放;处理好相应的异常。
  3. CSRF(Cross Site Request Forgery,跨站点请求伪造)。听起来与XSS有点相似,事实上两者区别很大,XSS利用的是站内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。
    防范:httpOnly;增加token;通过Referer识别。
  4. 文件上传漏洞
  5. DDos攻击

14. 加密技术

  1. 摘要加密:MD5, SHA
  2. 对称加密:DES算法,RC算法, AES
  3. 非对称加密:RSA
    非对称加密技术通常用在信息安全传输,数字签名等场合。
    HTTPS传输中浏览器使用的数字证书实质上是经过权威机构认证的非对称加密的公钥。

15. 流控(流量控制)

  1. 流量丢弃
  2. 通过单机内存队列来进行有限的等待,直接丢弃用户请求的处理方式显得简单而粗暴,并且如果是I/O密集型应用(包括网络I/O和磁盘I/O),瓶颈一般不再CPU和内存。因此,适当的等待,既能够替身用户体验,又能够提高资源利用率。
  3. 通过分布式消息队列来将用户的请求异步化。

参考资料
1. LVS:三种负载均衡方式比较+另三种负载均衡方式
2. 《大型网站技术架构——核心原理与技术分析》李智慧 著。
3. 亿级Web系统搭建:单机到分布式集群
4. 《大型分布式网站架构设计与实现》陈康贤 著。

from:http://www.importnew.com/24198.html