
架构和设计模式
文章平均质量分 80
超级谷歌
职业经历: 软件工程师->项目主管->架构师->技术经理。
目前专注于电子商务领域,大数据,云计算。并时常关注新技术,新领域的发展动态。
展开
-
延时任务队列-单机支持每秒10万延时消息高效触发(可部署多台提供更高并发)
本文方案是看了58的一位架构师的分享,但并没有实现细节。本文是对方案的深入研究及代码实现业务场景1.下单之后如果三十分钟之内或12小时没有付款就自动取消订单2.下单成功后60s之后给用户发送短信通知3.用户希望通过手机远程遥控家里的智能设备在指定的时间进行工作。这时候就可以将用户指令发送到延时队列,当指令设定的时间到了再将指令推送到只能设备。4. 七天自动收货5.一定时间后自动评价6...原创 2018-08-06 13:57:11 · 9338 阅读 · 3 评论 -
session共享的几种方式
伴随网站业务规模和访问量的逐步发展,原本由单台服务器、单个域名的迷你网站架构已经无法满足发展需要。此时我们可能会购买更多服务器,并且启用多个二级子域名以频道化的方式,根据业务功能将网站分布部署在独立的服务器上;或通过负载均衡技术(如:DNS轮询、Radware、F5、LVS等)让多个频道共享一组服务器。OK,头脑中我们已经构思了这样的解决方案,不过进入深入开发后新的技术问题又随之而来:我们把网站程转载 2014-08-04 14:14:23 · 15515 阅读 · 0 评论 -
架构要素-高可用性
高可用性---万无一失实现高可用架构的主要手段是数据和服务的冗余备份及失效转移。高可用的应用: 应用层主要处理网站应用的业务逻辑,因此也称业务逻辑层,应用的一个显著特点是应用的无状态。所谓无状态的应用是指应用服务器不保存业务的上下文信息,而仅根据每次请求提交的数据进行相应的业务逻辑处理,多个服务实例(服务器)之间完全对等,请求提交到任意服务器,处理结果都是一样的。 高可用的服务:l 分级管理l原创 2014-07-31 16:26:39 · 2299 阅读 · 0 评论 -
(精)依赖倒置原则
依赖倒置原则(Dependence Inversion Principle),简称DIP。 定义:High level modules should not depend upon low level modules, Both should depend upon abstractions. Abstractions should not depend upon details, Details原创 2014-08-01 10:23:22 · 2432 阅读 · 1 评论 -
架构要素--安全性
安全性—固若金汤 Xss跨站点脚本攻击cross site script.防止手段主要有两种:消毒; httponly 注入攻击Sql注入和os注入.Sql注入防止手段: 消毒 参数绑定(预处理) Csrf攻击cross site request forgery跨站点请求伪造 。防御手段主要是识别请求者身份。主要有;表单token; 验证码; referrer ch原创 2014-07-31 16:31:05 · 1547 阅读 · 0 评论 -
架构要素-高性能
高性能-瞬时响应不同视角下的网站性能:1 用户视角的网站性能用户在浏览器上直接感受的快慢。包括用户计算机和服务器的通信时间,服务器处理的时间;浏览器构造请求和解析响应数据的时间。 前端优化手段:优化页面Html式样,压缩资源(js,css,html等);利用浏览器段的并发和异步特性;调整浏览器缓存策略;使用CDN服务,反向代理等手段。 2 开发人员视角性能指标:原创 2014-07-31 16:25:40 · 1699 阅读 · 0 评论 -
(精)分包原则/包的设计原则/组件(包)设计原则
组件,或者叫程序集,是指一种能够被独立部署的二进制单元,一般是以DLL的形式存在的。针对大型的软件系统,良好的组件设计能够把系统分解为一些小的组件,从而使每个开发团队都可以只关注单个的组件而无需关心整个系统。组件设计需要遵守如下原则: 重用-发布等价原则(REP)即重用粒度就是发布粒度。一个组件中的类要么都是可以重用的,要么就都不可以重用。 共同重用原则(CRP)一个组件中的所有类应该是共同重用的原创 2014-07-30 09:03:25 · 8086 阅读 · 3 评论 -
数据库表设计--动态字段
数据库表设计当对象是动态的增加时的几种设计:1. 在表中预留字段. 这种做法效率高,但预览字段个数不知道要多少合适.2. 动态的在表中创建字段. 一般安全的系统是不容许这样做的.3. 利用动态属性表配置. 增加属性表,和属性值表. 欢迎大家讨论。从,方便性,灵活性,高效性(性能),安全性,合理性,面向对象性等方面探讨说明。原创 2012-05-24 17:19:33 · 12317 阅读 · 1 评论 -
另一条路去IOE:全内存数据库弯道超车
文 / 何鸿凌,作者就职于中国移动集团公司业务支撑系统部,从事大数据平台规划工作,微博@BigData分析 老祖宗留下了《易经》这本书,告诉我们世界的本质是“变化”的,“变化”之间有相关性。比如云计算的兴起是由于计算机的带宽快速增加引起的,大数据的兴起是由于数字化进程引发的。 当今的IT界最重要的“变化”就是摩尔定律。曾几何时,程序员们沉醉于用C语言精妙的语句节省了数KB内存空间,现在大家都用转载 2014-07-28 16:35:49 · 1558 阅读 · 0 评论 -
(精)理解ThreadLocal
ThreadLocal是什么早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为Threa原创 2014-05-23 10:31:59 · 2013 阅读 · 2 评论 -
[案例分享]我所经历的“余额宝”的那些故事
http://bbs.aliyun.com/read/158532.html?page=e转载 2014-05-22 20:47:20 · 4886 阅读 · 0 评论 -
分布式服务框架 Zookeeper -- 管理分布式环境中的数据
安装和配置详解本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非常简单,下面将从单机模式和集群模式两个方面介绍 Zookeeper 的安装和配置。单机模式单机安装非常简单,只要获取到 Zookeeper 的压缩包并解压到某个目录如:/home/zoo原创 2014-05-09 14:19:21 · 1412 阅读 · 0 评论 -
用消息队列和消息应用状态表来消除分布式事务
由于数据量的巨大,大部分Web应用都需要部署很多个数据库实例。这样,有些用户操作就可能需要去修改多个数据库实例中的数据。传统的解决方法是使用分布式事务保证数据的全局一致性,经典的方法是使用两阶段提交协议。长期以来,分布式事务提供的优雅的全局ACID保证麻醉了应用开发者的心灵,很多人都不敢越雷池一步,想像没有分布式事务的世界会是怎样。如今就如MySQL和PostgreSQL这类面向低端用户的开源原创 2014-03-20 09:02:03 · 15471 阅读 · 10 评论 -
storm分布式流计算引擎
场景伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样、更加便捷,同时对于信息的时效性要求也越来越高。举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这个宝贝马上就可以被卖家搜索出来、点击、购买啦,相反,如果这个宝贝要等到第二天或者更久才可以被搜出来,估计这个大哥就要骂娘了。再举一个推荐的例子,如果用户昨天在淘宝上买了一双袜子,今天想买一副泳转载 2013-12-15 16:21:07 · 8404 阅读 · 0 评论 -
微信架构(转)
微信——腾讯战略级产品,创造移动互联网增速记录,10个月5000万手机用户,433天之内完成用户数从零到一亿的增长过程,千万级用户同时在线,摇一摇每天次数过亿...在技术架构上,微信是如何做到的?日前,在腾讯大讲堂在中山大学校园宣讲活动上,腾讯广研助理总经理、微信技术总监周颢在两小时的演讲中揭开了微信背后的秘密。周颢,2001年毕业于华南理工大学,计算机专业硕士。2005年加入腾讯广州研发部,历任转载 2014-09-28 11:11:22 · 2403 阅读 · 0 评论 -
(精)数据库分库分表
数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案数据库分库分表(sharding)系列(四) 多数据源的事务处理数据库分库分表(sharding)系列(三) 关于使用框架还是自主开发以及sharding实现层面的考量数据库分库分表(sharding)系列(二) 全局主键生成策略数据库分库分表(sharding)系列(一) 拆分实施策转载 2014-08-15 15:22:45 · 3687 阅读 · 0 评论 -
(精)多版本软件构建策略分析
主要分析存在多个版本特性时的软件构建策略。多个版本特性在有些情况下仅仅对应于软件的本地化,复杂的情况就是不同版本中模块的业务逻辑、呈现策略都不相 同。这不仅在产品开发过程中增加成本,更多的成本将在维护阶段体现出来。因此,选择一个合适的构建策略对降低开发与维护成本都是非常重要的。一、传统软件构建策略 不同的版本采用不同的代码,通过派生或直接使用不同的代码实现。每个版本都会对应到一份的这个版本相关的代转载 2014-09-28 21:39:46 · 1768 阅读 · 0 评论 -
Spring+iBatis+Atomikos实现JTA事务
Atomikos TransactionsEssentials 是一个可靠的库,可以加入到您的Java应用程序,也就是说为了使用这个产品,您必须添加一些jar文件(包括在dist和lib文件夹下)到您的应用程序或者应用程序服务器。起因: 小项目,没有用分布式,但要操作两个数据库。本以为随便用spring配置两个数据源就搞定,查询是没问题,问题是有一个数据库老是插不进数据。Google狂搜之后,大概转载 2017-05-17 11:10:38 · 4241 阅读 · 0 评论 -
复习一下:算法复杂度
在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。(算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时转载 2015-01-04 09:19:53 · 1377 阅读 · 0 评论 -
面包房算法-时钟和分布式系统中事件的顺序
Time Clocks and the Ordering of Events in a Distributed System者:Leslie Lamport. 1978原文:http://www.stanford.edu/class/cs240/readings/lamport.pdf译者:phylips@bmy 2012-10-13译文:http://duanple.blog.163.com/b转载 2014-12-31 16:38:54 · 7332 阅读 · 0 评论 -
(精)软件架构设计
这是我最近做的架构设计演讲内容,公布出来让大家参考。我没有整理文字稿,只看 PPT 可能不是很容易理解。Sorry。http://mp.weixin.qq.com/s?__biz=MjM5OTAxNzc3OQ==&mid=200261412&idx=1&sn=c15b11b00640181009ea37b881e03a06#rd转载 2014-12-31 16:14:59 · 2160 阅读 · 0 评论 -
事件钩子
http://blog.youkuaiyun.com/magictong/article/details/4753122钩子程序http://baike.baidu.com/link?url=w2iTPMGUTZoWgiwKStrEllWOQUbDiEroztpL8Lip7gmvTpuEc1bXq1cwF8W4BkPoWWA2XjgRSQbd_hSJ0rLaV_两种类型的钩子:基本上有两种情况:切换执行上下文原创 2014-12-31 16:11:16 · 2948 阅读 · 0 评论 -
(精)构建高并发高可用的电商平台架构实践
从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流。转载请声明出处:http://blog.youkuaiyun.com/yangbutao/article/details/12242441作者:杨步涛关注分布式架构、大数据、搜索、开源技术QQ:306591368技术Blog:http://blog.youkuaiyun.com/yangbutao 一、 设计理念 1.转载 2014-04-22 17:33:41 · 3575 阅读 · 0 评论 -
好站收集中
搜索技术博客-淘宝:http://www.searchtb.com/淘宝DBA团队淘宝UED团队淘宝招聘淘宝数据平台团队淘宝核心系统团队淘宝质量保障团队量子统计官方博客原创 2013-09-19 09:56:02 · 1515 阅读 · 0 评论 -
基于有限状态机的交互组件设计与实现
有限状态机(FSM)(维基百科)是设计和实现事件驱动程序内复杂行为组织原则的有力工具。早在2007年,IBM的工程师就提出在在JAVASCRIPT中使用有限状态机来实现组件的方法,原文地址如下:《JavaScript 中的有限状态机》http://www.ibm.com/developerworks/cn/web/wa-finitemach/现在结合KISSY等现代JS库和框架提供的强大的自定义事转载 2015-01-09 15:18:25 · 3074 阅读 · 0 评论 -
(精)前后端分离的思考与实践(一)
前言为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异。痛定思痛,今天我们重新思考了“前后端”的定义,引入前端同学都熟悉的NodeJS,试图探索一条全新的前后端分离模式。随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本。为了提转载 2015-01-09 09:31:52 · 2844 阅读 · 0 评论 -
(精)前后端分离的思考与实践(二)
基于前后端分离的模版探索前言在做前后端分离时,第一个关注到的问题就是 渲染,也就是 View 这个层面的工作。在传统的开发模式中,浏览器端与服务器端是由不同的前后端两个团队开发,但是模版却又在这两者中间的模糊地带。因此模版上面总不可避免的越来越多复杂逻辑,最终难以维护。而我们选择了NodeJS,作为一个前后端的中间层。试图藉由NodeJS,来疏理 View 层面的工作。使得前后端分工更明确,让专案转载 2015-01-09 11:02:02 · 3007 阅读 · 0 评论 -
(精)Spring IOC核心源码学习III:bean标签和自定义标签实现原理
本文将解析spring bean定义标签和自定义标签的解析实现原理。这里说的标签仅限于以xml作为bean定义描述符的spring容器,继承AbstractXmlApplicationContext的一些子 容器,如XmlApplicationContext、ClassPathXmlApplicationContext、 FileSystemXmlApplicationContext等。同时也原创 2012-05-17 22:38:39 · 8277 阅读 · 0 评论 -
(精)tomcat 二级域名 session共享
Tomcat下,不同的二级域名之间或根域与子域之间,Session默认是不共享的,因为Cookie名称为JSESSIONID的Cookie根域是默认是没设置 的,访问不同的二级域名,其Cookie就重新生成,而session就是根据这个Cookie来生成的,所以在不同的二级域名下生成的Session也 不一样。找到了其原因,就可根据这个原因对Tomcat在生成Session时进行相应的修改(注:本原创 2014-08-04 11:33:57 · 14131 阅读 · 1 评论 -
(精)服务治理过程演进
http://javatar.iteye.com/blog/1345073转载 2014-08-07 16:09:26 · 2074 阅读 · 0 评论 -
浅析双11背后的电商IT基础架构
去年11月11日,也就是我们俗称的“双十一”当天,淘宝集市、淘宝商城天猫联手创造了交易额达191亿的销售神话。然而,即便是这种神话也还不足以成为留传至今的佳话,其中最为重要的原因就是支撑电子商务的后台IT系统在“双十一 ”抢购热潮中出现了不少弊端。 一般来说,电子商务网站对于IT系统的依赖程度不亚于其他任何系统部门。电子商务网站的IT系统包括电子商务订单在线交易、后台管理,供应链管理、物原创 2013-11-12 22:20:28 · 6899 阅读 · 0 评论 -
2013阿里巴巴双十一准备中的技术突破与亮点
今年是双十一购物狂欢节的第五个年头,每一年这个时刻对于技术团队而言都是一次 真刀实枪的数字战争。一方面,我们会提前在产品和业务层面努力创新,力争在当天为消费者留下更优质的购物体验。另一方面,全国人民的热情也是技术架构和细 节不断优化的动力。下面我就简单介绍下,今年双十一的准备过程中技术上的一些突破和亮点。全链路压测 压力测试对于评估网站性能的重要性是不言而喻的,但是,无论是线下模拟的单一原创 2013-11-10 16:34:08 · 3447 阅读 · 0 评论 -
追MM与23种设计模式
创建型模式 1、FACTORY—追MM少不然口味有所不同,但不管你麦当劳和肯德基就是生产鸡了请吃饭了,麦当劳的鸡翅和肯带MM去麦当劳或肯德基,只管向翅的Factory 德基的鸡翅都是MM爱吃的东西,虽服务员说“来四个鸡翅”就行了。工厂模式:客户类和工消费者无须修改就可以接纳何创建及如何向客户转载 2012-05-18 09:35:50 · 2164 阅读 · 0 评论 -
策略模式Strategy(对象行为型)
1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法;当然也可以将这些查找算法封装在一个统一的方法中,通转载 2012-05-18 00:11:30 · 1199 阅读 · 0 评论 -
淘宝下单高并发解决方案
周末参加了@淘宝技术嘉年华 主办的技术沙龙, 感觉收获颇丰,非常感谢淘宝人的分享。这里我把淘宝下单高并发解决方案的个人理解分享一下。我不是淘宝技术人员,本文只是写自己的理解,所以肯定是会有一些出入的。在session中牧劳为我们介绍了淘宝下单部分的技术方案变迁,我不介绍变迁,而只对现有系统做介绍。要优化下单,提高下单的TPS (Transaction per second),我们首先要做的转载 2012-05-27 12:38:30 · 1809 阅读 · 0 评论 -
构建高可用的系统
今天又温习了一下《分布式java应用》,好多名词看了都知道,但记不住,是不习惯记这些不易理解的专业术语呀。因为和客户说的时候他肯定不懂。但和懂技术的客户或者专家进行沟通的时候都是用这些专业术语,这时候我知道但往往想不起来,看来老了啊。看来以后还得记些,不然显得本架构师不专业呀。好了,言归正传,如何构建高可用的系统呢?首先什么是高可用?“高可用性”(High Availability)通常来原创 2012-04-18 19:49:58 · 2709 阅读 · 0 评论 -
依赖注入的方式
DI(Dependency Injectio,依赖注入),spring的IOC 反转控制模式就是用DI来实现的。方式:1.set属性注入2.字段注入3.构造器注入4.接口注入有时间在具体讲没种注入的概念及方式。原创 2012-03-07 12:45:39 · 1461 阅读 · 0 评论 -
如何进行软件架构设计3--如何成为架构师
架构师是具有技术发言权,方向决策权,和团队人员开发资源调配权的开发团队的TeamLear,也是这个程序的设计者,当然他是这个程序团队的灵魂!!因此,不想当Teamleader的程序员,绝对不可能成为真正意义上的架构师!同时,不是Teamleader的架构师,也是一个被架空的,苍白无力的架构师!架构师,如果只是把需求变成程序,那就不是架构师,那是叫“照着葫芦画瓢”。架构师,如果只是精原创 2012-02-21 09:11:23 · 1574 阅读 · 1 评论 -
如何进行软件架构设计2--如何进行软件架构设计
软件架构设计的目的 对于外包业务类型的项目,软件架构设计的目的与产品类型的项目有所不同,在这里主要讨论外包类型项目的软件架构设计目的。1、为大规模开发提供基础和规范,并提供可重用的资产,软件系统的大规模开发,必须要有一定的基础和遵循一定的规范,这既是软件工程本身的要求,也是客户的要求。架构设计的过程中可以将一些公共部分抽象提取出来,形成公共类和工具类,以达到重用的目的。2、一定程度上缩原创 2012-02-21 09:07:08 · 1614 阅读 · 0 评论 -
应用架构设计1--什么是架构师
架构设计目录什么是架构?软件架构师的职责 软件架构师之路 软件架构师的重要 分享架构师什么是架构? 人们对一个结构内的元素及元素间关系的一种主观映射的产物。 软件架构师的职责架构师是软件行业中一种新兴职业,工作职责是在一个软件项目开发过程中,将客户的需求转换为规范的开发计划及文本,并制定这个项目的总体架构,指导整个开发团队完成这个计划。架构原创 2012-02-20 09:19:55 · 2175 阅读 · 0 评论