系统设计

支付系统设计:支付系统的账户模型(一)

情到浓时终转凉″ 提交于 2019-11-27 09:51:41
账户体系是支付系统的基础,它的设计直接影响整个系统的特性。这里探讨如何针对电子商务系统的支付账户体系设计。我们从一些基本概念开始入手,了解怎么建模。 支付账户和登录账号 账户体系设计首先要区分两个概念,支付账户和登录账号。 这是两个不同业务领域的概念:支付账户指用户在支付系统中用于交易的资金所有者权益的凭证;登录账号 指用户在系统中的登录的凭证和个人信息。 一个用户可以有多个登录账户,一个登录账户可以有多个支付账户,比如零钱账户,储值卡账户等。 一般来说,支付账户不会在多个登录账户之间共用。如果没有特殊说明,下文中的账户,都默认指支付账户。 账户的设计需求 在支付系统中,账户的设置,主要是从如下几个方面来考虑: 交易的需求,比如检查账户是否被锁定、余额是否足够、是否有效等。 记账的需求,按照公司会计需求记录账户上的所有行为,包括支出、充值、转账等。 对账的需求,包括和支付渠道、商户、个人的对账需求,核对交易和账户余额是否正确。 风控的需求,如反洗钱、反欺诈等,都需要依赖于账户体系来提供核心数据。本文暂不分析这个内容,将在《支付风控》、《支付反洗钱》这两篇文章中详细分析 信用的需求,对用户、资产、商户等主体进行信用评估时,也需要依赖账户体系来提供的核心数据。本文也暂不分析这内容,将在《信用与支付》一文中分析。 这五个需求,按照其设计的优先级,也是从支付、记账、对账、风控来进行。

《数据密集型应用系统设计》读书笔记--第5章 数据复制

爷,独闯天下 提交于 2019-11-27 07:16:22
数据复制 一、主从复制 1、主从复制的工作原理: 指定某一个副本作为主副本。当客户写数据库时,先将数据写入主副本本地。 主副本把数据更改作为日志发送给所以从副本。每个副本将更改日志应用到本地。严格保持与主副本相同的写入顺序。 客户端从数据库读取数据时,可以在主副本和从副本上读取,但是写只能在主副本上写。 2、同步复制和异步复制 同步复制 :客户将更新发送给主节点,主节点将数据更新发送给从节点,从节点更新完成后通知主节点,最后由主节点通知客户更新完成。 半同步 :某一个从节点是同步的,其他节点都是异步。当同步的从节点发生故障,则将另一个从节点提升为同步模式。这样保证至少有两个节点拥有最新数据。 全异步 :系统吞吐性能好,但是无法保证数据的持久化。 3、配置新的从节点 增加副本,如果只是简单的复制,会造成不同节点上有不同时间点的数据。因为客户端还在不停向主副本写数据,数据不停变化。 在不停机,数据服务不中断的情况下增加从节点: 在某个时间点对主节点的数据副本产生一个一致性快照。 把此快照拷贝到从节点。 从节点连接到主节点后请求一致性快照之后的数据更改日志。 从节点应用这些数据变更,称为追赶。 4、节点失效的处理 从节点失效 :从节点的硬盘上保存了收到的数据变更日志。从节点可以知道在故障前的最后一笔事务,并连接到主节点请求这笔事务之后的数据变更,进行追赶。 主节点失效 :节点切换

分布式系统设计和架构

寵の児 提交于 2019-11-27 01:10:22
1、两台设备,分别部署两组服务。 2、主服务器一主一备,主备热切换。业务服务器,一主一备,负载均衡。数据库主主复制。 3、主服务器主备热切换,使用心跳服务器监视,一边挂了,另一边自动启动。 4、对于业务服务器,由主服务指定主备,监视主的业务服务器,主的业务服务器挂了,重新指定一个主的业务服务器。 5、对于业务服务器,主机管理一组备机,客户端都向主机请求,主机负责负载均衡。分为两种情况:   a、对客户端的请求进行负载均衡。   b、对于管理的设备进行负载均衡。 6、业务服务器都有一个master线程和slave线程,功能分离。只有主机的master线程才是激活状态。 7、关于权限校验,客户端登陆主服务器,主服务器分配一个令牌,客户端每次请求都带着令牌,请求来到业务服务器,业务服务器向主服务器校验令牌是否有效。 转载于:https://www.cnblogs.com/nzbbody/p/4470339.html 来源: https://blog.csdn.net/weixin_30247159/article/details/99234835

基于SSM的医院预约挂号系统设计与实现

你。 提交于 2019-11-26 21:35:16
基于SSM的医院预约挂号系统设计与实现 基于SSM的医院预约挂号系统设计与实现mysql数据库创建语句 基于SSM的医院预约挂号系统设计与实现oracle数据库创建语句 基于SSM的医院预约挂号系统设计与实现sqlserver数据库创建语句 基于SSM的医院预约挂号系统设计与实现spring springMVC hibernate框架对象(javaBean,pojo)设计 基于SSM的医院预约挂号系统设计与实现spring springMVC mybatis框架对象(javaBean,pojo)设计 基于SSM的医院预约挂号系统设计与实现mysql数据库版本源码: 超级管理员表创建语句如下: create table t_admin( id int primary key auto_increment comment '主键', username varchar(100) comment '超级管理员账号', password varchar(100) comment '超级管理员密码' ) comment '超级管理员'; insert into t_admin(username,password) values('admin','123456'); 建议表创建语句如下: create table t_contact( id int primary key auto

基于SSM的网上求职报名系统设计和实现

◇◆丶佛笑我妖孽 提交于 2019-11-26 21:34:23
基于SSM的网上求职报名系统设计和实现 基于SSM的网上求职报名系统设计和实现mysql数据库创建语句 基于SSM的网上求职报名系统设计和实现oracle数据库创建语句 基于SSM的网上求职报名系统设计和实现sqlserver数据库创建语句 基于SSM的网上求职报名系统设计和实现spring springMVC hibernate框架对象(javaBean,pojo)设计 基于SSM的网上求职报名系统设计和实现spring springMVC mybatis框架对象(javaBean,pojo)设计 基于SSM的网上求职报名系统设计和实现mysql数据库版本源码: 超级管理员表创建语句如下: create table t_admin( id int primary key auto_increment comment '主键', username varchar(100) comment '超级管理员账号', password varchar(100) comment '超级管理员密码' ) comment '超级管理员'; insert into t_admin(username,password) values('admin','123456'); 表创建语句如下: create table t_customer( id int primary key auto

单片机之硬件系统设计原则

柔情痞子 提交于 2019-11-26 12:57:46
  一个单片机应用系统的硬件电路设计包含两部分内容:一是系统扩展,即单片机内部的功能单元,如ROM、RAM、I/O、定时器/计数器、中断系统等不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。二是系统的配置,即按照系统功能要求配置外围设备,如键盘、显示器、打印机、A/D、D/A转换器等,要设计合适的接口电路。   系统的扩展和配置应遵循以下原则:   1、尽可能选择典型电路,并符合单片机常规用法。为硬件系统的标准化、模块化打下良好的基础。   2、系统扩展与外围设备的配置水平应充分满足应用系统的功能要求,并留有适当余地,以便进行二次开发。   3、硬件结构应结合应用软件方案一并考虑。硬件结构与软件方案会产生相互影响,考虑的原则是:软件能实现的功能尽可能由软件实现,以简化硬件结构。但必须注意,由软件实现的硬件功能,一般响应时间比硬件实现长,且占用CPU时间。   4、系统中的相关器件要尽可能做到性能匹配。 如选用CMOS芯片单片机构成低功耗系统时,系统中所有芯片都应尽可能选择低功耗产品。   5、可靠性及抗干扰设计是硬件设计必不可少的一部分,它包括芯片、器件选择、去耦滤波、印刷电路板布线、通道隔离等。   6、单片机外围电路较多时,必须考虑其驱动能力。驱动能力不足时,系统工作不可靠,可通过增设线驱动器增强驱动能力或减少芯片功耗来降低总线负载。   7

《数据密集型应用系统设计》读书笔记--第三章

廉价感情. 提交于 2019-11-26 10:15:06
数据存储与检索 数据结构: 日志是仅支持追加式更新的数据文件。 为了避免查找时从头到尾扫描文件,采用索引结构。 索引: 一、Hash索引 保存内存中的hash map,把每个键一一映射到数据文件中字节偏移量。更新键和插入键时要更新hash map。适合每个键的值频繁更新的场景。 节省空间的方法: 压缩段+合并段 当文件达到一定大小时,关闭文件的写入,将新的数据写在新的段上。在已关闭的段上执行 压缩 ,丢弃重复的键,之保留最新的更新。 对关闭写入的段执行 合并 ,合并的段会写入新的文件中。在合并的过程中数据的访问仍然在旧的文件上,合并成功以后,在新的文件上访问。 每个段有 自己的Hash表 。查找数据时找key,从最新的段的hash表开始找起。 细节问题: 1.删除记录:需要删除一对键值时,在日志文件中追加一个删除记录(墓碑),当合并时如果发现墓碑记录则丢弃这个记录。 2.崩溃恢复:当hash表丢失时避免从头扫描文件重建hash表,会保存每个段的hash表快照到磁盘上。 3.损坏的记录:写的过程中如果发生数据库崩溃,Bitcask文件包含校验值会发现损坏部分并且丢弃。 4.并发控制:写线程一个,读线程多个。 追加式的写入方式优点 1.在磁盘上顺序写速度是最快的。 2.段文件时不可变的,写入时如果发生崩溃,避免出现文件中新值和旧值混杂的情况。 3.合并操作避免出现碎片化的问题。

分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储

你。 提交于 2019-11-26 03:23:24
[TOC] 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL、HBase等。 基于面向接口的编码思想来开发,因此这个系统具有一定的扩展性,有兴趣的朋友直接看一下代码,就能理解其设计思想,虽然代码目前来说很多地方还是比较紧耦合,但只要花些时间和精力,很多都是可抽取出来并且可配置化的。 因为时间的关系,我只写了京东和苏宁易购两个网站的爬虫,但是完全可以实现不同网站爬虫的随机调度,基于其代码结构,再写国美、天猫等的商品爬取,难度不大,但是估计需要花很多时间和精力。因为在解析网页的数据时,实际上需要花很多时间,比如我在爬取苏宁易购商品的价格时,价格是异步获取的,并且其api是一长串的数字组合,我花了几个小时的时间才发现其规律,当然也承认,我的经验不足。 这个系统的设计,除了基本的数据爬取以外,更关注以下几个方面的问题: 1.如何实现 分布式 ,同一个程序打包后分发到不同的节点运行时,不影响整体的数据爬取 2.如何实现 url随机循环调度 ,核心是针对不同的顶级域名做随机 3.如何 定时向url仓库中添加种子url ,达到不让爬虫系统停下来的目的 4.如何实现对 爬虫节点程序的监控 ,并能够发邮件报警 5.如何实现一个 随机IP代理库 ,目的跟第2点有点类似,都是为了反反爬虫 下面会针对这个系统来做一个整体的基本介绍