目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

存档: 2019 年 07 月 (26)

并行的世界

并发简史  早期计算机(不包含操作系统),只能从头到尾执行一个程序,并且执行的程序能访问计算机中的所有资源。  操作系统的出现使得计算机每次能运行多个程序,并且不同程序都在单独的进程中运行:操作系统为各个独立执行的进程分配各种资源,包括内存、文件句柄以及安全证书等。计算机中加入操作系统来实现多个程序的同时执行,主要是基于以下原因: 资源利用率(同步等待造成的资源浪费) 公平性(通过时间分片实现用户和程序共享计算机资源) 便利性(多程序开发可以降低单个程序的开发的复杂度) 串行与并行的区别  好处:可以缩短整个流程的时间 串行(5):洗茶具 => 打水 => 烧水(同步等待) => 等水开 => 冲茶 并行(4):打水 => 烧水同时洗茶具 => 水开 => 冲茶 可怕的现实:摩尔定律的失效  摩尔定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔 18-24 个月便会增加一倍,性能也将提升一倍。这一定律揭示了信息技术进步的速度。 ​  然而,在 2004 年,Intel 的 4GHz 芯片宣布推迟到 2005 年,然后再 200....

基于Redis的sorted set实现排行榜功能

业务需求  排行榜功能是一个很普遍的需求。使用 Redis 中有序集合的特性来实现排行榜是又好又快的选择。 一般排行榜都是有实效性的,比如“用户积分榜”,游戏中活跃度排行榜,游戏装备排行榜等。 需求面临的问题 数据库设计复杂。 并发数较高。 数据要求实时性高。 Redis 相关 API 概述 封装 Redis 工具类 RedisService Service 层(RangingService 使用 Redis 工具类) import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.stereotype.Service; import java.util.LinkedHashMap; import java.util.List; im....

SpringBoot整合Redis

Redis 远程连接配置 [root@localhost ~]# vim /etc/redis/6379.conf bind 0.0.0.0 port 6379 daemonize yes protected-mode no requirepass 123 SpringBoot 整合 Redis 引入依赖   spring-boot-starter-data-redis 包含了 jedis,封装了一类 SpringBoot 与 Redis 的连接工具。 <dependency <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 编写 redisTemplate 的配置类,设置 redisConnectFactory import org.springframework.data.redis.connection.RedisConnectionF....

Redis

TRDB  建立在 DBMS 上,通过 DBMS 处理数据吗,单机物理性能受限、横向多机扩充(分布式引用)困难。 技术特点 使用强存储模式,表、行、字段的建立都需要预先严格定义,并进行相关数据约束。 采用 SQL 技术标准来定义和操作数据库。 采用强事务保证可用性和安全性。 主要采用单机集中式处理方式。 单机的局限性 单机读、写数据的速度瓶颈问题 单机存储数据量有限 服务器的纵向扩展的局限性 NoSQL  主体符合非关系型、分布式、开源、横向扩展能力的数据库。 技术特点 使用弱存储模式(取消数据存入类型的强制检查等一系列技术…),速度快。 没有采用 SQL 技术标准来定义和操作数据库。 采用弱事务或根本没有事务处理机制。 主要采用多机分布式处理(DP, Distributed Processing)。 数据存储结构多元化。 NoSql vs TRDB TRDB 为强数据存储模式,NoSql 为弱数据存储模式 分布式技术是 NoSql 的核心技术思路、TRDB 以集中处理为出发点 TRDB 的事务严格遵循 ACID 原则,而 NoSql 主体遵循 Base 原则 TRDB ....

Dubbo

Dubbo 项目分层 传送门 Duboo 开发环境的搭建 创建项目 # 创建dubbo项目并删除src目录 # 右键dubbo项目,创建user-api子项目 # 右键dubbo项目,创建user-service子项目 # 右键dubbo项目,创建user-web子项目 parent 父项目限定版本 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </b....

Zookeeper

注册中心  微服务应用和机器越来越多,调用方需要知道接口的网络地址,如果靠配置文件的方式去控制网络地址,对于动态新增机器,维护带来很大问题。常见的注册中心:zookeeper、Eureka、consul、etcd。 理解注册中心:服务管理,核心是有个服务注册表,心跳机制动态维护。 服务提供者 provider: 启动的时候向注册中心上报自己的网络信息。 服务消费者 consumer: 启动的时候向注册中心上报自己的网络信息,拉取 provider 的相关网络信息。 安装 JDK1.8 # 解压 tar -zxvf jdk-8u191-linux-x64.tar.gz # 移动到/usr/local目录下 mv jdk1.8.0_191 /usr/local/ # 修改/etc/profile,在文件的最后面加上下面几行 vim /etc/profile JAVA_HOME=/usr/local/jdk1.8.0_191 JRE_HOME=$JAVA_HOME/jre PATH=$JAVA_HOME/bin:$PATH export PATH # 激活配置 source /etc/....

数据库的备份

数据备份的意义 保护数据的安全。 在出现意外的时候(硬盘的损坏,断电,黑客的攻击),以便数据的恢复。 导出生产的数据以便研发人员或者测试人员测试学习。 高权限的人员操作失误导致数据丢失,以便恢复。 数据库的备份类型 完全备份:对整个数据库的数据进行备份。 部分备份:对部分数据进行备份(可以是一张表也可以是多张表)  增量备份:是以上一次备份为基础来备份变更数据的,节约空间。  差异备份:是以第一次完全备份的基础来备份变更备份的,浪费空间。 数据库备份的方式  逻辑备份效率低,恢复数据效率低,但是逻辑备份节约空间;物理备份浪费空间,但是相对逻辑备份而言效率比较高。 逻辑备份:直接生成 SQL 语句保存起来,在恢复数据的时候执行备份的 SQL 语句来实现数据的恢复。常见备份工具:mysqldump 物理备份:直接拷贝相关的物理数据 数据库备份的场景 热备份:备份时,数据库的读写操作不会受到影响。 温备份:备份时,数据库的读操作可以进行,但是写操作不能执行。 冷备份:备份时,不能进行任何操作。 mysqldump 数据备份(跨机器) # mysqldump使用语法 mysq....