master

高并发服务端分布式系统设计概要(中)

旧时模样 提交于 2020-02-01 01:07:36
高并发服务端 分布式系统设计概要(中) 上篇( 链接 )我们完成了在此分布式系统中,一个group的设计。那么接下来,我们设计系统的其他部分。如前文所述,我们的业务及其数据以group为单位,显然在此系统中将存在many many的groups(别告诉我你的网站总共有一个业务,像我们的“山推”,那业务是一堆一堆地),那么由谁来管理这些groups呢?由Web过来的请求,又将如何到达指定的group,并由该group处理它的请求呢?这就是我们要讨论的问题。 我们引入了一个新的角色——Global Master,顾名思义,它是管理全局的一个节点,它主要完成如下工作: (1)管理系统全局配置,发送全局控制信息;(2)监控各个group的工作状态,提供心跳服务,若发现宕机,通知该group发起分布式选举产生新的Group Master;(3)处理Client端首次到达的请求,找出负责处理该请求的group并将此group的信息(location)返回,则来自同一个前端请求源的该类业务请求自第二次起不需要再向Global Master查询group信息(缓存机制);(4)保持和Global Slave的强一致性同步,保持自身健康状态并向全局的“心跳”服务验证自身的状态。 现在我们结合图来逐条解释上述工作,显然,这个系统的完整轮廓已经初现。 首先要明确,不管我们的系统如何“分布式”

高并发服务端分布式系统设计概要(上)

青春壹個敷衍的年華 提交于 2020-02-01 01:07:05
高并发服务端 分布式系统设计概要(上) ======张峻崇 原创。转载请注明出处。====== 又是快一年没写博客了,2013年也只剩尾巴,也不知道今年都忙了些什么。写这篇文章的目的,主要是把今年以来学习的一些东西积淀下来,同时作为之前文章《高性能分布式计算与存储系统设计概要》的补充与提升,然而本人水平非常有限,回头看之前写的文章也有许多不足,甚至是错误,希望同学们看到了错误多多见谅,更欢迎与我讨论并指正。 好了,下面开始说我们今天要设计的系统。 这个系统的目标很明确,针对千万级以上PV的网站,设计一套用于后台的高并发的分布式处理系统。这套系统包含业务逻辑的处理、各种计算、存储、日志、备份等方面内容,可用于类微博,SNS,广告推送,邮件等有大量线上并发请求的场景。 如何抗大流量高并发?(不要告诉我把服务器买的再好一点)说起来很简单,就是“分”,如何“分”,简单的说就是把不同的业务分拆到不同的服务器上去跑(垂直拆分),相同的业务压力分拆到不同的服务器去跑(水平拆分),并时刻不要忘记备份、扩展、意外处理等讨厌的问题。说起来都比较简单,但设计和实现起来,就会比较困难。以前我的文章,都是“从整到零”的方式来设计一个系统,这次咱们就反着顺序来。 那我们首先来看,我们的数据应该如何存储和取用。根据我们之前确定的“分”的方法,先确定以下2点: (1)我们的分布式系统,按不同的业务,存储不同的数据

Redis Cluster集群

一世执手 提交于 2020-01-31 23:18:46
1 Redis Cluster集群 redis3.0以后推出的redis cluster 集群方案,redis cluster集群保证了高可用、高性能、高可扩展性。 1.1 redis-cluster架构图 架构细节 : (1) 所有的 redis 节点彼此互联 ( PING-PONG 机制 ), 内部使用二进制协议优化传输速度和带宽 . (2) 节点的 fail 是通过集群中超过半数的节点检测失效时才生效 . (3) 客户端与 redis 节点直连 , 不需要中间 proxy 层 . 客户端不需要连接集群所有节点 , 连接集群中任何一个可用节点即可 (4)redis-cluster 把所有的物理节点映射到 [0-16383] slot 上 ,cluster 负责维护 node<->slot<->value Redis 集群中内置了 16384 个哈希槽 ,当需要在 Redis 集群中放置一个 key-value 时, redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽, redis 会根据节点数量大致均等的将哈希槽映射到不同的节点 示例如下: 1.2 redis-cluster 投票 : 容错 最小节点数: 3 台 (1) 节点失效判断 :集群中所有 master

centos7用docker安装mysql5.7.24后配置主从

痞子三分冷 提交于 2020-01-31 22:24:48
1)使用docker安装完成mysql5.7.24,我规划的是3台: 192.168.0.170(Master) 192.168.0.169(Slave) 192.168.0.168(Slave) 2)配置三台机器的my.cnf配置文件 我三台机器的配置文件都是/usr/local/mysql/conf/my.cnf 3)设置三台主从服务器配置 vi /usr/local/mysql/conf/my.cnf [mysql] default-character-set=utf8 [mysqld] interactive_timeout = 120 wait_timeout = 120 max_allowed_packet = 32M log-bin=mysql-bin server-id=170 character-set-server=utf8 vi /usr/local/mysql/conf/my.cnf [mysql] default-character-set=utf8 [mysqld] interactive_timeout = 120 wait_timeout = 120 max_allowed_packet = 32M log-bin=mysql-bin server-id=169 character-set-server=utf8 vi /usr/local

MySQL主

梦想与她 提交于 2020-01-31 17:42:26
1)、什么是MySQL主从复制 MySQL主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个MySQL数据库从节点。MySQL默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库。 2)、MySQL主从复制作用 一、数据热备 作为备数据库,当主数据库服务器发生故障后,可切换到从数据库继续工作,避免数据丢失。 二、读写分离 可支持MySQL数据库服务器支持更大的并发。数据读写操作可分配在不同的服务器间进行。如操作报表中尤其重要,由于部分报表SQL语句非常的慢,会导致锁表,影响前台服务。使用主从复制,前台使用master,负责写,报表使用slave,负责读,那么报表SQL将不会造成前台锁表,保证了前台正常运行。 三、架构扩展 随着业务量越来越大,I/O访问频率过高,单机可能无法满足。此时做多库的存储,如一主多从方式,以降低磁盘I/O访问,提高单个机器的I/O性能。 MySQL主从复制原理 MySQL数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master节点,数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信

git的使用

风格不统一 提交于 2020-01-31 13:37:35
一、前言 作为一个软件开发人员,不可能不知道Git。Git作为一个复杂的版本控制系统,命令之多,即使经常使用,一些命令也记不住,一般只记住几个常用的命令,不是所有使用Git命令行都是高效的。本教程不讲Git命令,而是先让你用上git,再去学习git。本教程应该称作TortoiseGit入门指南。因为下面要借助一个图形化的软件,TortoiseGit来操作git。用GUI(图形界面)再谈CLI(命令行),我相信这会更容易让人接受。 二、关于版本控制 什么是版本控制?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 我们仅对保存着软件源代码的文本文件作版本控制管理,但实际上,你可以对任何类型的文件进行版本控制。 而且还可以查看历史版本、文件谁进行提交修改删除的、也就是你对文件的一举一动都在公司的控制范围内 我见过有的优秀的互联网公司,他们所有的员工都会使用版本管理系统(svn\git),他们所有的文档、文件、资料都可以在上面找到 最关键的是他还具有权限的说法,你具有对应的权限才能进行对应的操作 三、Git的简介 3.1 Git的介绍 我们在公司进行研发的时候,对公司来说我们程序员写的代码是最宝贵的财富 那么我们研发的时候如果电脑突然一些事件,导致代码丢失就造成了大量的损失 所以自然而然就出现文件的版本关系管理工具

【爬虫学习笔记day58】7.scrapy-redis实战+从零搭建Redis-Scrapy分布式爬虫+Scrapy-Redis分布式策略+安装Redis+修改配置+Redis数据库桌面管理工具

心不动则不痛 提交于 2020-01-31 12:26:43
文章目录 7.scrapy-redis实战 从零搭建Redis-Scrapy分布式爬虫 Scrapy-Redis分布式策略: 一、安装Redis 二、修改配置文件 redis.conf 三、测试Slave端远程连接Master端 注意:Slave端无需启动`redis-server`,Master端启动即可。只要 Slave 端读取到了 Master 端的 Redis 数据库,则表示能够连接成功,可以实施分布式。 四、Redis数据库桌面管理工具 7.scrapy-redis实战 从零搭建Redis-Scrapy分布式爬虫 Scrapy-Redis分布式策略: 假设有四台电脑:Windows 10、Mac OS X、Ubuntu 16.04、CentOS 7.2,任意一台电脑都可以作为 Master端 或 Slaver端,比如: Master端 (核心服务器) :使用 Windows 10,搭建一个Redis数据库,不负责爬取,只负责url指纹判重、Request的分配,以及数据的存储 Slaver端 (爬虫程序执行端) :使用 Mac OS X 、Ubuntu 16.04、CentOS 7.2,负责执行爬虫程序,运行过程中提交新的Request给Master 首先Slaver端从Master端拿任务(Request、url)进行数据抓取,Slaver抓取数据的同时

git学习--git回退版本后如何push

此生再无相见时 提交于 2020-01-31 07:05:02
作为一个初学git的萌新,在进行socket库封装时,出现了巨大的bug,只能回退版本,但回退版本后commit后push会提示 fatal: You are not currently on a branch. To push the history leading to the current (detached HEAD) state now, use git push origin HEAD: < name-of-remote-branch > 此时,我们无法push,可以先保存修改 git tag tmp 然后切换分支到master,并pull git checkout master git pull origin master 合并修改 git merge tmp 最后push,并删除tmp git push origin master git tag -d tmp 这样我们就将回退后的历史提交到了远程的master分支,继续开发时可以直接在master分支上继续 来源: CSDN 作者: 彼方时间の幻梦 链接: https://blog.csdn.net/weixin_45802439/article/details/104117946

从零开始在ubuntu上安装和使用k8s集群及报错解决

点点圈 提交于 2020-01-31 02:13:50
文章目录 安装docker 安装kubernetes 配置k8s集群 配置虚拟机网络 配置Master节点的k8s网络 拉取k8s需要的镜像 启动 kubeadm 和 kubelet 配置 node节点 部署应用 报错解决 此文首发于我的个人Jekyll博客: zhang0peter的个人博客 这几天在学习K8S的安装和使用,在此记录一下 此文参考了视频教程: 两小时Kubernetes(K8S)从懵圈到熟练——大型分布式集群环境捷径部署搭建_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 报错解决在文章最后 安装docker 先安装docker: curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - add-apt-repository "deb https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable" apt update && apt install docker-ce docker run hello-world 安装kubernetes docker成功运行后配置k8s的更新源,推荐阿里云: echo "deb https://mirrors

【Git】Git撤销操作、删除文件和恢复文件

≯℡__Kan透↙ 提交于 2020-01-30 17:22:39
【Git】Git撤销操作、删除文件和恢复文件 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28602957/article/details/70194216 Git在找工作过程中被问到了。 面试官:如果我在git中执行了,rm 111.txt,然后反悔了,又不想删除该文件了,如何恢复。 我:git status可以查看状态,然后根据提示执行相关语句。 哎,回答的感觉不好,在此总结一下吧。 删除文件 rm 删除工作区的文件 diligentyang@DESKTOP-DGRQ07O MINGW64 ~/Desktop/新建文件夹 (master) $ touch 111.txt diligentyang@DESKTOP-DGRQ07O MINGW64 ~/Desktop/新建文件夹 (master) $ git add 111.txt diligentyang@DESKTOP-DGRQ07O MINGW64 ~/Desktop/新建文件夹 (master) $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: 111.txt diligentyang@DESKTOP