系统设计

高并发系统设计(二)数据库优化

最后都变了- 提交于 2019-12-02 14:52:49
池化技术 核心思想空间换时间 最小连接数,最大连接数 主从复制 读多写少,数据冗余,全量拷贝。 主从复制 一般一个主库挂3~5个从库 部署复杂度 从库延迟问题 数据冗余,发送消息队列时多带 使用缓存 读主库 统一访问数据库 中间件:TDDL、DDB 代理层: 分库分表 数据库的写入请求量大造成的性能和可用性方面的问题。 数据分片:依照某一种策略将数据尽量平均地分配到多个数据库节点或多个表中 垂直拆分 将数据库的表拆分到多个不同的数据库中,按 业务类型 来拆分 水平拆分 按 数据特点 来拆分 按照某一个字段的哈希值做拆分,适用于实体表 按照某一字段的区间来拆分,时间字段 解决分分表引入的问题 引入了分库分表键,也就分区键 查询要带上分区键,否则就要全库分表查,建立映射表。 一些数据库的特性在实现时可能变得很困难 JOIN COUNT 主键的全局唯一性 主键如何选 使用业务字段 使用生成的唯一ID 自增字段ID:有序可以提升B+树的写性能 搭建发号器服务: UUID:无序,无业务特征 NoSQL 互补 - Snowflake 算法 来源: https://www.cnblogs.com/yeni/p/11751008.html

高并发系统设计 概述

邮差的信 提交于 2019-12-02 14:40:31
通用方法 Scale Out 横向扩展,分而治之,采用分布式布署的方式分流,让每个服务器都承担一部分并发和流量 缓存 使用缓存来提高系统性能,好比“拓宽河道”。任何能够降低响应时间的中间件。缓存思想遍布很多设计领域 异步 在某些场景下,未处理完成先返回,再通知。 ** 高并发系统的演进应该循序渐进,以解决系统中存在的问题为目的和驱动力 ** 设计目标 高并发是运用设计手段让系统能够处理更多并发请求,这是一切架构设计的 背景和前提 。 提升系统性能 性能优化原则 问题导向 二八原则 数据支撑 持续长久 性能度量指标 响应时间: 平均值、最大值、分位值 吞吐量 性能优化思路 提高处理核心数 减少单次任务响应时间 I/O密集还是CPU密集 来源: https://www.cnblogs.com/yeni/p/11750640.html

最全的权限系统设计

那年仲夏 提交于 2019-12-02 05:12:36
史上最全的权限系统设计 权限系统设计 前言 权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题。 目前在公司负责权限这块,所以对权限这块的设计比较熟悉,公司采用微服务架构,权限系统自然就独立出来了,其他业务系统包括商品中心,订单中心,用户中心,仓库系统,小程序,多个APP等十几个系统和终端 1.权限模型 迄今为止最为普及的权限设计模型是RBAC模型,基于角色的访问控制(Role-Based Access Control) 1.1 RBAC0模型 RBAC0模型如下: 这是权限最基础也是最核心的模型,它包括用户/角色/权限,其中用户和角色是多对多的关系,角色和权限也是多对多的关系。 用户 是发起操作的主体,按类型分可分为2B和2C用户,可以是后台管理系统的用户,可以是OA系统的内部员工,也可以是面向C端的用户,比如阿里云的用户。 角色 起到了桥梁的作用,连接了用户和权限的关系,每个角色可以关联多个权限,同时一个用户关联多个角色,那么这个用户就有了多个角色的多个权限。有人会问了为什么用户不直接关联权限呢?在用户基数小的系统,比如20个人的小系统,管理员可以直接把用户和权限关联,工作量并不大,选择一个用户勾选下需要的权限就完事了。但是在实际企业系统中,用户基数比较大

用户系统设计与实现

╄→гoц情女王★ 提交于 2019-12-02 01:53:05
用户系统,主要分为账号体系和用户信息两大类。账号体系包括,登陆验证、注册、第三方授权、以及权限管理。用户信息包括,用户地理位置、用户属性、用户设备信息、还有用户日志信息。本文会介绍用户模块的具体落地方案。 登陆验证 在一般项目账号体系中,一般会要求支持手机、邮箱、账号、QQ、微信、微博实现登陆。后面三种方式都是基于第三方授权后,完成的身份验证。手机、邮箱、账号则是相对传统的登录方式。 用户身份与登录的授权方式是独立开的,即用户uid和登录方式是一对多的关系。举例来说,用户A在使用微博授权登陆后,服务端鉴别身份信息为uid=123。用户A下次使用微信登陆,服务端鉴别身份同样为uid=123。不存在同一用户A拥有多个账号信息的现象。登陆授权表设计如下。 12345678910111213 //用户授权表CREATE TABLE `user_auth` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `uid` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '用户id', `identity_type` tinyint(4) unsigned NOT NULL DEFAULT '1' COMMENT '1手机号 2邮箱 3用户名 4qq 5微信 6腾讯微博 7新浪微博', `identifier`

关于软件团队建设的几点建议

↘锁芯ラ 提交于 2019-12-01 19:40:46
通过最近几年的实践,对于软件开发的最小团队模式,有一些新的理解,和大家共享:   很多团队,公司在成本压力下,总是希望寻求一个最经济有效的团队组合,这个是可以理解的,也是开发的初衷。   最小团队不是指单纯的减少人员,不是把一个需要5个人做的工作压缩为1个人做。   软件开发本身存在一个众所周知的弊病,就是只要存在一个能够编码的技术人员,那么软件就总是能够“做”的出来,这也给人一个假象,软件开发的最小团队就是一定数量的“码农”;这个在其他领域比如建筑和制造几乎是不可想象的,究其根源,是因为软件的质量标准过于的飘渺: 我的意思是,最小团队绝不是几个“码农”。   人员可以合并,但角色不能合并;职能可以合并,但能力不能合并: 换言之,担什么角色就必须能做什么事情,就必须具备相应的能力.  总之,我对最小团队的看法,最小团队就是最少的角色,而这些角色不能再削减,但人员还是可以以兼任的方式来合并角色,不过在兼任过程中要注意不能有名无实,同时需要具备胜任该角色的能力.  三要素  软件时开发的三个基本要素是:管理,业务和技术。  管理: 除完全以单人方式进行的开发不在本文讨论的范围,2人以上就存在一定的团队管理,人员的协调,工作的安排,流程的部署,进度的监督等等,加上必然存在的客户管理,“鸟无头不飞”,说的就是管理者的必要性。  业务: 很简单,软件做了半天是为什么而做

淘宝大秒系统设计详解

て烟熏妆下的殇ゞ 提交于 2019-12-01 15:50:55
#一些数据# 大家还记得2013年的小米秒杀吗?三款小米手机各11万台开卖,走的都是大秒系统,3分钟后成为双十一第一家也是最快破亿的旗舰店。经过日志统计,前端系统双11峰值有效请求约60w以上的QPS ,而后端cache的集群峰值近2000w/s、单机也近30w/s,但到真正的写时流量要小很多了,当时最高下单减库存tps是红米创造,达到1500/s。 #热点隔离# 秒杀系统设计的第一个原则就是将这种热点数据隔离出来 ,不要让1%的请求影响到另外的99%,隔离出来后也更方便对这1%的请求做针对性优化。针对秒杀我们做了多个层次的隔离: 业务隔离 。把秒杀做成一种营销活动,卖家要参加秒杀这种营销活动需要单独报名,从技术上来说,卖家报名后对我们来说就是已知热点,当真正开始时我们可以提前做好预热。 系统隔离 。系统隔离更多是运行时的隔离,可以通过分组部署的方式和另外99%分开。秒杀还申请了单独的域名,目的也是让请求落到不同的集群中。 数据隔离 。秒杀所调用的数据大部分都是热数据,比如会启用单独cache集群或MySQL数据库来放热点数据,目前也是不想0.01%的数据影响另外99.99%。 当然实现隔离很有多办法,如可以按照用户来区分,给不同用户分配不同cookie,在接入层路由到不同服务接口中;还有在接入层可以对URL的不同Path来设置限流策略等。服务层通过调用不同的服务接口

团队作业-系统设计

爷,独闯天下 提交于 2019-12-01 08:27:46
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign/ 这个作业要求在哪里 https://www.cnblogs.com/harry240/p/11524148.html 团队名称 golden express 这个作业的目标 设计好系统,方便开发 队员学号列表 王伟 201731062214 刘冬 201731062227 张旭 201731062129 秦裕航 201731062432 (组长) 本阶段任务分工情况 201731062214 王伟 文档撰写 前端工程师 201731062432 秦裕航 后端工程师 UI设计+原型 201731062129 张旭 负责前端的开发.负责算法学习、设计及开发 201731062227 刘冬 负责后端的开发 规划项目进程 数据库设计 概要设计 软件体系结构 主要业务模块描述 圈子功能:能对同同一种爱好的人归类,让大家可以在学校里面谈论大家各自喜欢的话题 寻伴功能:支持线上发布活动,对用户的匹配,以及在线下活动过程中的一个记录 查询一个学校学生的信息 数据库设计 下阶段详细工作计划 首先先把“用户"和主要功能“寻伴”给做出来 用户功能 编写用户信息到数据库 寻伴动能 发布活动到服务器,服务器通过网络显示活动到客户端

团队作业第三次——系统设计

我的梦境 提交于 2019-12-01 07:58:47
一、作业描述: 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign/ 这个作业要求在哪里 https://www.cnblogs.com/harry240/p/11524148.html 团队名称 巧克力王子与六个小矮人 这个作业的目标 设计完成团队项目的概要说明、详细说明、数据库等 二、团队成员: 姓名 学号 陶一(组长) 201731062213 孟祥一 201731062207 易林 201731062134 王艺霖 201731062127 陈劲松 201731062132 沈墨 201731062115 干冰雪 201731062502 三、本阶段任务分工情况: 分工: 陶一(201731062213):组织每天的例会,控制项目开发流程,制作并控制燃尽图,文档编写及分工 孟祥一(201731062207):完成项目的数据库设计 易林(201731062134):进行登录注册和进入界面的设计,详细设计编写 王艺霖(201731062127):后端开发的接口编写,实现登录注册以及主界面创意浏览功能 陈劲松(201731062132):前端完成登录注册的代码部分,概要设计功能模块编写 沈墨(201731062115):进行主界面的设计,详细设计编写 干冰雪

黄金点游戏——系统设计

末鹿安然 提交于 2019-12-01 07:25:37
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience 这个作业要求在哪里 https://www.cnblogs.com/harry240/p/11524148.html 团队名称 七个小矮人 这个作业的目标 做好软件框架,设计数据库、算法等,为下一步具体开发做准备 团队成员 学号 姓名 201731024137 马驰 201731021227 于丁 201731024140 刘川 201731024128 姜玖林 201731024125 李朋柯 201731024122 张新明 201731024114 杨汶桐 本阶段任务分工情况 需求分析 马驰、张新明、姜玖林、于丁、杨汶桐、李朋柯、刘川 概要设计 刘川、李朋柯 数据库设计 杨汶桐、张新明 详细设计 马驰、姜玖林、于丁 概要设计 软件体系结构图 业务模块 模块名称 登陆 输入 用户名、密码 输出 是否登陆成功 功能说明 验证使用者身份,是否有权限使用本软件 模块名称 注册 输入 用户名、密码 输出 是否注册成功 功能说明 增加新的符合要求的用户,并且赋予使用本软件的权限 模块名称 功能 输入 黄金点游戏用户想要输的点数 输出 黄金点游戏G值 功能 进行黄金点游戏 模块名称 新房间创建 输入 设置游戏玩家个数、游戏回合时长、总回合数

团队作业---系统设计

隐身守侯 提交于 2019-12-01 07:24:54
团队第二次作业——系统设计 这个作业属于哪个课程 软件工程 这个作业要求在哪里 https://www.cnblogs.com/harry240/p/11524148.html 团队名称 代码写不队 这个作业的目标 完成系统模块设计以及数据库的设计管理,准备下阶段的学习与开发 一、团队介绍 201731024131 曾正男(组长) 201731024133 魏恩博 201731024142 任星辰 201731024118 李志 201731024138 宋树钱 201731024124 王旭 201731024 付昶宇 201731024 何辉 二、本阶段任务 2.1 任务安排 一、 曾正男组长带领完成软件功能的进一步分析设计,并和队友魏恩博、李志、王旭一同完成系统原型模型的设计和优化。 二、 根据需求分析作业完成的结果,同时进行系统概要设计以及详细设计,由何辉指导,与队友付昶宇、任星辰联合完成,并进行修改整理。 三、 对软件的数据库进行设计,由宋树钱辅助队友任星辰、何辉完成数据库数据的收集和管理,并进行数据库设计,完成数据库的设计。 2.2 概要设计 针对软件的一个大的流程,我们对其进行了概要设计,和普通程序大致流程差不多,主要是UI和软件内部的建设:登陆界面;单词查询、背诵;收藏和历史记录的设计。 2.3 数据库设计 三、下阶段任务 3.1 任务计划 UI的完善