开发模式
colie_li
coding
展开
-
Future 模式详解
改模式的核心思想是异步调用。 在做应用开发时,有时会遇到一种场景:在完成某个主任务的同时,需要处理一些其它的子任务,为了加快响应速度,会将子任务放在另外的线程中执行。例如,搜索引擎在处理用户的查询请求时,不仅要从本地数据库查找匹配的结果,同时可能会向远程的广告服务器请求广告数据,最后将搜索结果和广告一起返回给用户。在这个例子中,主线程从本地查找搜索结果,同时启动子线程从远程原创 2016-01-27 17:21:54 · 1132 阅读 · 0 评论 -
从好友中心开始,聊“多对多”类业务数据库水平切分架构实践
本文将以“好友中心”为例,介绍“多对多”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践。一、什么是多对多关系所谓的“多对多”,来自数据库设计中的“实体-关系”ER模型,用来描述实体之间的关联关系,一个学生可以选修多个课程,一个课程可以被多个学生选修,这里学生与课程时间的关系,就是多对多关系。二、好友中心业务分析好友关系主要分为两类,弱好友关系与强好友转载 2017-10-18 20:01:27 · 404 阅读 · 0 评论 -
从帖子中心开始,聊“1对多”类业务数据库水平切分架构实践
本文将以“帖子中心”为例,介绍“1对多”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践:如何来实施水平切分水平切分后常见的问题典型问题的优化思路及实践一、什么是1对多关系所谓的“1对1”“1对多”“多对多”,来自数据库设计中的“实体-关系”ER模型,用来描述实体时间的映射关系:1对1一个用户只有一个登录名,一个uid对转载 2017-10-18 19:51:17 · 431 阅读 · 0 评论 -
从用户中心开始,聊“单KEY”类业务数据库水平切分架构实践
本文将以“用户中心”为例,介绍“单KEY”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践:如何来实施水平切分。水平切分后常见的问题 。典型问题的优化思路及实践。一、用户中心用户中心是一个非常常见的业务,主要提供用户注册、登录、信息查询与修改的服务,其核心元数据为:User(uid, login_name, passwd,转载 2017-10-18 19:44:06 · 405 阅读 · 0 评论 -
互联网“平滑数据迁移”架构技术实践
一、问题的提出互联网有很多“数据量较大,并发量较大,业务复杂度较高”的业务场景,其典型系统分层架构如下:上游是业务层biz,实现个性化的业务逻辑中游是服务层service,封装相对通用的数据访问下游是数据层db,存储固化的业务数据服务化分层架构的好处是,服务层屏蔽下游数据层的复杂性,例如缓存、分库分表、存储引擎等存储细节不需要向调用方暴露,而只向上游提供方便的RPC访问接口。当转载 2017-10-18 20:30:33 · 1709 阅读 · 0 评论 -
互联网高并发架构技术实践
一、什么是高并发高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。响应时间:系统对请求做出响应的时间。例如系统处理一个HTT转载 2017-10-18 20:31:31 · 288 阅读 · 0 评论 -
互联网高可用架构技术实践二
一、什么是高可用高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。假设系统一直能够提供服务,我们说系统的可用性是100%。如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8.76个小转载 2017-10-18 20:32:47 · 276 阅读 · 0 评论 -
Java设计模式之模板模式(Template )
模板模式(Template ): 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。模式中的角色 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。转载 2017-10-15 01:38:18 · 269 阅读 · 0 评论 -
缓存穿透,缓存击穿,缓存雪崩解决方案分析
前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方转载 2018-02-06 15:51:57 · 307 阅读 · 0 评论 -
squirrel-foundation状态机的使用细节
squirrel-foundation状态机的使用细节date: 2017-06-19 15:50:18上一篇文章介绍了stateless4j、spring-statemachine以及squirrel-foundation三款状态机引擎的实现原理,以及我为何选择squirrel-foundation作为解决方案。本文主要介绍一下项目中如何使用squirrel-foundation的一些细节以及如...转载 2018-04-20 15:22:13 · 1666 阅读 · 0 评论 -
理解linux cpu load
你可能已经很熟悉linux的平均load. 平均load是3个数 (可以用uptime或者top命令查看), 他们看着像下面这样:load average: 0.09, 0.05, 0.01大多数人对这些数都有一个模糊的概念:三个数分别代表了一个随着更长时间上的一个平均值(1分钟, 5分钟, 15分钟). 并且值越小越好. 越大的数可能就表明有问题或者已经高负载了. 但是这个阈值是多少?...转载 2019-01-24 09:51:05 · 343 阅读 · 0 评论 -
从订单中心开始,聊“多KEY”类业务数据库水平切分架构实践
不知不觉,水平切分系列文章已经和大家相伴走过半年,介绍了“单key”,“一对多”,“多对多”等不同业务场景下,水平切分的方式方法与最佳实践。本篇讲义将以“订单中心”为例,介绍“多key”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践。一、什么是“多key”类业务所谓的“多key”,是指一条元数据中,有多个属性上存在前台在线查询需求。订单中心业务分析转载 2017-10-18 20:07:26 · 531 阅读 · 0 评论 -
互联网数据库“跨库分页”架构技术实践
一、需求缘起分页需求互联网很多业务都有分页拉取数据的需求,例如:微信消息过多时,拉取第N页消息。京东下单过多时,拉取第N页订单。浏览58同城,查看第N页帖子。这些业务场景对应的消息表,订单表,帖子表分页拉取需求有这样一些特点:有一个业务主键id,例如msg_id,order_id,tiezi_id分页排序是按照非业务主键id来排序的,业务中经常按照时间time来排序or转载 2017-10-18 20:26:12 · 1117 阅读 · 0 评论 -
前言:数据库典型架构实践
本章,将介绍数据库架构设计中的一些基本概念,常见问题以及对应解决方案,为了便于读者理解,将以“用户中心”为例,讲解数据库架构设计的常见玩法。用户中心用户中心是一个非常常见的业务,主要提供用户注册、登录、信息查询与修改的服务,其核心元数据为:User(uid, uname, passwd, sex, age, nickname, …)其中:uid为用户ID,主键。转载 2017-10-18 20:09:42 · 213 阅读 · 0 评论 -
SNS 背后的技术: 消息流的推拉模式选择
上一篇扯到 SNS 本质上还是要满足沟通需要, 既然有沟通就涉及到信息本体的传播, 曾经的各种传播方式多半采用把信息从消息源推送到接收者, 由接收者用收件箱保存并查看的方式实现, 比如短信, 比如电子邮件等等这种推送模式在传统信息沟通中运作的还不错, 每个人维护一个收件箱, 消息发完就不用管了, 因为一条消息一般不会发给非常多的人, 所以发送过程几乎瞬时完成, 同时对接收者来说单位时间收到的消转载 2016-01-21 17:07:48 · 1321 阅读 · 0 评论 -
枚举常用的使用方式
枚举常用的使用方式:public class TestEmen { enum TestInfo{ ZHUANLI(1,"zhuanli"), LUNWEN(3,"lunwen"), CHENGJI(3,"chengji"); private int type; private String name;原创 2016-01-27 16:06:00 · 696 阅读 · 0 评论 -
线程安全的单利
老大一直说要用这个来做面试题,让面试的人来写一个线程安全的单例模式,感觉自己还没掌握,把 Head first--Design Patterns 找了出来,以下大部分内容抄袭自这本书,略有增删改。 1. 全局变量的缺点: 必须在程序一开始就创建好对象,如果程序在这次的执行过程中又一直没用到它,就非常耗费资源。 2. 经典的单例模式实现:转载 2015-01-16 00:26:13 · 831 阅读 · 0 评论 -
java之策略模式
策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:转载 2015-01-06 12:06:50 · 485 阅读 · 0 评论 -
java观察者模式
1. 概述 有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。2. 解决的问题 将一个系统分割成一个一些类相互协作的类有一个不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带原创 2015-01-05 16:30:28 · 720 阅读 · 0 评论 -
Java 动态代理
动态代理是在程序动态执行时去生成的class,在生成时要提供一组interface给它,然后该class就宣称实现了这些接口,生成的代理对象不会做实质性的工作,比如增加其他业务逻辑等,在生成实例时必须提供一个handler,由它来接管工作,是加上应用的就是反射技术。代码:生命被代理对象所实现的接口public interface SubjectInf { String Say(Str原创 2014-12-27 16:41:27 · 675 阅读 · 0 评论 -
Builder模式解决构造函数多参数阅读性不好问题
在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成。那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Builder模式来替代多参数构造函数是一个比较好的实践法则。我们常常会面临编写一个这样的实现类(假设类名叫DoDoContact),这个类拥有多个构造函数,DoDoContact(String nam原创 2016-01-28 18:19:06 · 1225 阅读 · 0 评论 -
App开放接口api安全性—Token签名sign的设计与实现
前言在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等,但是为了安全起见让用户暴露的明文密码次数越少越好,我们一般在web项目中,大多数采用保存的session中,然后在存一份到cookie中,来保持用户的回话有效性。但是在app提供的开放接口中,后端服转载 2016-03-20 00:26:30 · 1500 阅读 · 0 评论 -
缓存失效,导致高并发穿透DB的几种解决思路
其实,这个场景几乎每个程序员都会接触到,但是还是有很多程序员对这种思路没有好的办法,下面我再整理下之前收集到的资料,重新发下。由于该文章转载很多,找不到准确出处。如有侵权,请联系我。 当缓存失效时,容易出现高并发的查询DB,导致DB压力骤然上升,这种现象我们称之为缓存穿透。这篇blog主要是探讨如何在缓存将要失效时,及时地更新缓存,而不是如何在缓存失效之后,如何防止高并发的转载 2017-02-04 11:58:07 · 7075 阅读 · 1 评论 -
后语:除了水平切分,数据库架构设计还经常遇到哪些问题
不知不觉,数据库水平切分的系列文章已经走过半年,很感谢朋友们一路的陪伴,也感谢gitchat这个平台,能够把自己曾经实践过的水平切分架构方案,梳理总结和沉淀,系统的记录成文字,和大家一起分享。本文是这个专题的最后一讲,在设定这个专题之初,就已经想好,这一讲的内容了:一部分,总结:特别担心大家没有完整的订阅这一系列文章,无法系统的看到全貌,特地留了一篇总结性质的文章,把1-5篇的知识转载 2017-10-18 20:08:19 · 380 阅读 · 0 评论 -
多终端同步方案
一、多终端同步的含义1指用户在多个终端切换时可获得一致性体验,不丢失上下文,2 如果用户多个终端同时在线要能做到实时同步。案例:apple的Handoff;qq消息多终端自动同步;有道云的同步等二、系统目标1实时性,服务端数据变更,在<1s 时间内推送至各个端。2实现消息的多终端增量同步,然后通过同步机制确保不丢消息。同步机制必须避免流量浪费,所以需要做增量。3客...转载 2019-07-24 16:57:40 · 4113 阅读 · 0 评论