架构设计
文章平均质量分 81
okiwilldoit
这个作者很懒,什么都没留下…
展开
-
分布式事务介绍
本地消息表顾名思义就是会有一张存放本地消息的表,一般都是放在数据库中,然后在执行业务的时候 将业务的执行和将消息放入消息表中的操作放在同一个事务中,这样就能保证消息放入本地表中业务肯定是执行成功的。2PC 和 3PC 都是数据库层面的,而 TCC 是业务层面的分布式事务,就像我前面说的分布式事务不仅仅包括数据库的操作,还包括发送短信等,这时候 TCC 就派上用场了!(1)同步阻塞,2PC的两个阶段中,协调者和参与者的通信都是同步的,这会导致整个事务的长时间阻塞。原创 2023-04-07 10:21:08 · 343 阅读 · 0 评论 -
消息队列实现原理(以kafka为例)
一. 概述:消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。使用较多的消息队列有Kafka、ActiveMQ、RabbitMQ、ZeroMQ、MetaMQ、RocketMQ。消息队列在实际应用中常用的使用场景:异步处理,应用解耦,流量削锋和消息通讯四个场景。1、异步处理:用户注册后,需要发注册邮件和注册短信。2、应用解耦:用户下单后,订单系统需要通知库存系统。3、流量削锋:秒杀活动,一般会因为流量过大,导致流量暴增,应原创 2020-09-21 10:33:22 · 4033 阅读 · 0 评论 -
利用Redis设计常用系统(分布式锁)
一. 发红包用redis队列。用户发红包时,输入金额m和红包个数n。后台程序接收到这两个参数后,将m分成随机的n份,将这n个数写入到redis队列中。用户抢红包时,访问redis队列,每抢一个就lpop出一个金额,直到队列为空。二. 商品秒杀系统用redis的DECR命令。Redis Decr 命令将 key 中储存的数字值减一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。思路:商品信息在秒杀活动开启之前, 将其从关系型数据库(比如mysql原创 2020-09-15 09:32:52 · 239 阅读 · 0 评论 -
架构设计/开发常用工具框架
1.rpc框架:brpc,spp 2.缓存数据库(nosql):redis,couchbase,memcache,cassandra(facebook开源分布式) 3.服务发现:consul,zookeeper 4.消息队列:kafka 5.监控:grafana,influx db(时序数据库) 6.数据库:mysql 7.版本管理:gitlap(开源),svn,github 8.数...原创 2019-07-31 18:18:58 · 1981 阅读 · 0 评论 -
开源监控利器 grafana
grafana是用于可视化大型测量数据的开源程序,他提供了强大和优雅的方式去创建、共享、浏览数据。dashboard中显示了你不同metric数据源中的数据。grafana最常用于因特网基础设施和应用分析,但在其他领域也有机会用到,比如:工业传感器、家庭自动化、过程控制等等。grafana有热插拔控制面板和可扩展的数据源,目前已经支持Graphite、InfluxDB、OpenTSDB、Ela...转载 2019-07-31 18:07:39 · 212 阅读 · 0 评论 -
非阻塞socket编程
一. 阻塞与非阻塞阻塞: 阻塞调用是指调用结果返回之前,当前线程会被挂起。该进程被标记为睡眠状态并被调度出去。函数只有在得到结果之后才会返回。当socket工作在阻塞模式的时候, 如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。 非阻塞: 非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。epoll工作在非阻塞模式时,才会发挥作用。二原创 2016-03-30 15:39:18 · 4758 阅读 · 0 评论 -
Redis Sentinel学习和集群
一.介绍Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。 它的主要功能有以下几点: ...原创 2018-09-05 15:47:49 · 245 阅读 · 0 评论 -
couchbase安装和配置
一.Couchbase介绍Couchbase,是MemBase与couchDb这两个NoSQL数据库的合并的产物,是一个分布式的面向文档的NoSQL数据库管理系统,即拥有CouchDB的简单和可靠以及Memcached的高性能。它内置了Memcached的所有服务,可以说是Memcached的升级版,分布式版本。Couchbase是高性能,高伸缩性和高可用的分布式缓存系统。二.与Red...原创 2018-08-31 11:16:28 · 6488 阅读 · 0 评论 -
consul和consul template初步体验
一、consul概述consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。服务部署简单,只有一个可运行的二进制的包。每个节点都需要运行agent,他有两种运行模式server和client。每个数据中心官方建议需要3或5个...原创 2018-08-30 17:16:08 · 4066 阅读 · 1 评论 -
教你如何迅速秒杀掉:99%的海量数据处理面试题
前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。 毕竟受文章和理论之限,本文将摒弃绝大部分的细节,只谈方法/模式论,且注重用最通俗最直白的语言阐述相关问题。最后...转载 2014-04-17 20:29:11 · 1133 阅读 · 0 评论 -
协程学习
感谢同事的分享,对协程有了初步的认识。 一.基本概念协程(Coroutine, 又被称呼为“纤程”、“微线程”)顾名思义就是“协作的例程”(Co-operative routines)。跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程技巧。简单的说,协程就是类似函数一样的程序组件,程序员可以在一个线程里面轻松创建数十万个协程,就像...原创 2016-01-28 17:00:16 · 1527 阅读 · 0 评论 -
nginx架构初探
nginx性能高,而nginx的高性能与其架构是分不开的。一. 基本架构nginx在启动后,在unix系统中会以daemon的方式(即守护进程)在后台运行,后台进程包含一个master进程和多个worker进程。我们也可以手动地关掉后台模式,让nginx在前台运行,并且通过配置让nginx取消master进程,从而可以使nginx以单进程方式运行,但一般不会这么做。所以,我们可以看到,...原创 2016-07-28 15:06:32 · 283 阅读 · 0 评论 -
一分钟了解负载均衡的一切
什么是负载均衡负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】。1.常见的负载均衡方案常见互联网分布式架构如上,分为客户端层、反向代理nginx层、站点层、服务层、数据层。可以看到,每一个下游都有多个上游调用,只需要做到,每一个上游都均匀访问每一个下游,就能实现“将请求...转载 2016-09-26 15:56:49 · 320 阅读 · 0 评论 -
搭建Sphinx全文搜索引擎
目前,全文搜索引擎主要有三种: Lucene系, 包含solr 和 elasticsearch,Java支持的很好; sphinx,c++开发, 简单高性能, Xapian,c++开发, 国内的 xunsearch 基于XapianSphinx是开源的搜索引擎,它支持英文的全文检索。所以如果单独搭建Sphinx,你就已经可以使用全文索引了。但是往往我们要求的是中文索引,怎么做呢?国人提供了一个原创 2017-12-22 13:27:40 · 2206 阅读 · 0 评论 -
libuv初步学习
一. 简介Libevent、libev、libuv三个网络库,都是c语言实现的异步事件库Asynchronous event library)。事件(Event):事件是异步事件通知机制的核心,比如fd事件、超时事件、信号事件、定时器事件。有时候也称事件为事件处理器(EventHandler),这个名称更形象,因为Handler本身表示了包含处理所需数据(或数据的地址)和处理的方法(回调函原创 2018-01-09 17:04:11 · 2104 阅读 · 2 评论 -
redis实现分布式锁
1、分布式锁分布式锁在是一种用来安全访问分式式机器上变量的安全方案,一般用在全局id生成,秒杀系统,全局变量共享、分布式事务等。一般会有两种实现方案,一种是悲观锁的实现,一种是乐观锁的实现。悲观锁的并发性能差,但是能保证不会发生脏数据的可能性小一点。悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就...原创 2018-06-07 18:42:53 · 323 阅读 · 0 评论 -
OAuth 2.0协议原理
一.基本原理OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。OAuth 2.0 主要有4类角色: • resource owner:资源所有者,指终端的“用户”(即授权登录中资料信息的拥有者) • resource server:资源服务器,...原创 2018-06-14 09:54:19 · 3867 阅读 · 0 评论 -
分布式系统常见负载均衡算法
一、概要随着系统日益庞大、逻辑业务越来越复杂,系统架构由原来的单一系统到垂直系统,发展到现在的分布式系统。分布式系统中,可以做到公共业务模块的高可用,高容错性,高扩展性,然而,当系统越来越复杂时,需要考虑的东西自然也越来越多,要求也越来越高,比如服务路由、负载均衡等。此文将针对负载均衡算法进行讲解,不涉及具体的实现。二、负载均衡算法在分布式系统中,多台服务器同时提供一个服务,并统一到服...原创 2018-08-16 11:39:15 · 18034 阅读 · 0 评论