目录 1 背景 1.1 为什么需要分布式文件服务 1.1.1 单机时代 1.1.2 独立文件服务器 1.1.3 分布式文件系统 1.2 什么是FastDFS 2 系统架构 2.1 Tracker集群 2.2 Storage集群 2.3 Storage状态收集 2.4 FastDFS的上传过程 2.5 FastDFS的文件同步 2.6 FastDFS的文件下载 1 背景 1.1 为什么需要分布式文件服务 1.1.1 单机时代 初创时期由于时间紧迫,在各种资源有限的情况下,通常就直接在项目目录下建立…
笔者在大学中迷迷糊糊地度过了四年的光景,心中有那么一点目标,但总感觉找不到发力的方向. 在四年间,尝试写过代码结构糟糕,没有意义的课程设计,尝试捣鼓过Android开发,尝试探索过软件工程在实际开发中的应用,尝试参与过.net的实际应用项目开发. 在经历了这些探索之后,我突然发现一些代码在实现业务功能的同时,还能保持优美的结构,这让我很着迷,有一种莫名其妙的兴奋感. 基于这个发现,我开始探寻这些代码拥有迷人魔力的原因,迷迷糊糊地又接触到了设计模式,系统架构设计的概念. 在大学的最后,我希望再一次…
ERP之痛 曾几何时,我混迹于电商.珠宝行业4年多,为这两个行业开发过两套大型业务系统(ERP).作为一个ERP系统,系统主要功能模块无非是订单管理.商品管理.生产采购.仓库管理.物流管理.财务管理等等.作为一个管理系统,大家的一般开发习惯就是使用.Net或Java技术,建立一个单块(单进程)架构的应用,只有一个SQLServer或MySql数据库.然后在项目文件中分一下各个模块,三层结构方式组织代码编写开发.最后测试,交付上线. 起初,因为数据量不大,系统性能还不错,各种列表查询,报表查询,E…
Spring Cloud作为一套微服务治理的框架,几乎考虑到了微服务治理的方方面面,之前也写过一些关于Spring Cloud文章,主要偏重各组件的使用,本次分享主要解答这两个问题:Spring Cloud在微服务的架构中都做了哪些事情?Spring Cloud提供的这些功能对微服务的架构提供了怎样的便利? 我们先来简单回顾一下,我们以往互联网架构的发展情况: 传统架构发展史 单体架构 单体架构在小微企业比较常见,典型代表就是一个应用.一个数据库.一个web容器就可以跑起来,比如我们开发的开源软…
原文地址:http://原文地址:https://github.com/1991wangliang/transaction 基于Dubbo的分布式事务框架(LCN) 该框架依赖Redis/dubbo/txManager服务.依赖第三方框架lorne_core 原理与功能 基于对spring tx PlatformTransactionManager的本地模块事务控制从而达到全局控制事务的目的.该框架兼容任何依赖PlatformTransactionManager的DB框架.利用三阶段提交的方式来…
一.RabbitMQ 队列 在生产者消费模型中,比如去餐馆吃饭的例子.生产者相当于厨师,队列相当于服务员,消费者就是你. 我们必须通过服务员,才能吃饭! 如果队列满了,队列会一直hold住.必须让消费者,获取一个,队列才能解除hold状态. 队列本身就有一个锁,保证数据安全 举例: import queue q = queue.Queue(maxsize=10) q.put(10) q.put(8) q.put(6) print(q.get()) print(q.get()) print(q.g…
分布式锁系列文章 分布式锁(1) ----- 介绍和基于数据库的分布式锁 分布式锁(2) ----- 基于redis的分布式锁 分布式锁(3) ----- 基于zookeeper的分布式锁 代码:https://github.com/shuo123/distributeLock Redis单机版实现 set和lua实现 获取锁 SET resource_name my_random_value NX PX 30000 NX key不存在时才set PX 设置过期时间 my_random_valu…
本文主要以使用小程序云Serverless服务开发一个记事本微信小程序为例介绍如何使用小程序云Serverless开发微信小程序.记事本小程序的开发涉及到云函数调用.云数据库存储.图片存储等功能,较好地展示了小程序云Serverless服务在实际研发场景中如何帮助开发者提升研发效率. 一.准备工作 在开始前,确保已经完成以下准备工作:1.注册微信开放平台账号,并创建微信小程序,获得微信小程序AppID:2.下载并安装微信开发者工具:3.已安装 nodejs 开发环境. 二.操作步骤 2.1.步骤…
今天在测试基于etcd的分布式锁过程中,在测试获取锁后,释放之前超出TTL时长的情况下自动延长TTL这部分功能,在延长指定key的TTL时总是返回404错误信息,在对目标KEY更新TTL时目标KEY已不存在. 最终问题排查为ETCD集群3个节点之间的系统时间不一致,因为TTL延长是在KEY创建后单独一个监听线程中进行,在TTL过半之后会更新TTL,因此可能出现更新TTL之前,由于集群中时间超前的节点将目标KEY删除,导致更新TTL时找不到目标KEY的错误. 同步集群所有节点系统时间后问题排除:…
在电商项目中,经常有秒杀这样的活动促销,在并发访问下,很容易出现上述问题.如果在库存操作上,加锁就可以避免库存卖超的问题.分布式锁使分布式系统之间同步访问共享资源的一种方式 基于redis实现分布式锁的原理: redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系.其次Redis提供一些命令SETNX,GETSET,这些命令是原子操作,利用这些特性, 可以很充分的实现分布式锁.SETNX,GETSET 命令如下: SETNX key val…