Google Dapper
概述
当代的互联网的服务,通常都是用复杂的、大规模分布式集群来实现的。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具。
Dapper–Google生产环境下的分布式跟踪系统,应运而生。那么我们就来介绍一个大规模集群的跟踪...
2019-01-16 01:42:23 |
Devops
SQL 笛卡尔积处理
笛卡尔积
实际问题
查询 A 表,关联 B 表。但是 B 表的记录可能存在多条。
原始
SELECT count(a.ID)
FROM A a
LEFT JOIN B b
ON a.order_no=b.order_no
WHERE ....
GROUP BY ...
Having...
修正
可以将 B 查询关联中用到的数据做一个子查询。
可以如下处理:
SELECT...
2019-01-14 10:40:37 |
SQL
MySQL 日志常见问题 redo log binlog undolog
mysql 日志
MySQL 里有两个日志,即:重做日志(redo log)和归档日志(binlog)。
其中,binlog 可以给备库使用,也可以保存起来用于恢复数据库历史数据。它是实现在 server 层的,所有引擎可以共用。redo log 是 InnoDB 特有的日志,用来支持 crash-safe 能力。
你一定听过 MySQL 事务的两阶段提交,指的就是在事务提交的时候,分...
2019-01-14 10:29:09 |
SQL
负载均衡
DNS 负载均衡
开始呢,我们的应用只有一台web-server。那么你希望:
输入guduyan.com就能定位该server!
那很简单,只要在DNS里配上域名和你的server映射关系,就能访问到啦!
好,现在呢,多了一台web-server,你就可以通过在DNS里加一条配置,以DNS轮询方式进行负载均衡。
Nginx+DNS
现在假设,我们多了一些需求啊。你的系统按照功能模...
2019-01-14 10:29:09 |
Distributed
Redis 是什么?redis 的应用场景有哪些?
Redis 是什么?
Redis是一种开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。
它支持数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志和半径查询的地理空间索引。
中文官网
Redis 使用场景
分布式锁
Redis 分布式锁设计
计数器(string)
如知乎每个问题的被浏览器次数
set key 0
in...
2019-01-14 10:29:09 |
Cache
java 浅拷贝,深度拷贝与属性复制
问题
日常工作中,我们希望复制一个对象A的属性到对象B,且保证二者的变化不会互相影响。
直接赋值,肯定是无法满足的。
深度拷贝与浅拷贝
概念
浅复制(浅克隆)
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。
换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
深复制(深克隆)
被复制对象的所有变量都含有与原来的对象相同...
2019-01-09 15:13:13 |
Java
Java Thread 小结
基础知识
java thread
使用线程的目的
用多线程只有一个目的,就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。
多线程,并行与并发
很多人都对其中的一些概念不够明确,如同步、...
2019-01-09 00:44:18 |
Java
Greenplum Database-02-sharing nothing/everything/disk/memory 分布式数据库
业务背景
当今世界是一个信息化的世界,我们的生活中无论是生活、工作、学习都离不开信息系统的支撑。
而信息系统的背后用于保存和处理最终结果的地方就是数据库。因此数据库系统就变得尤为重要,这意味着如果数据库如果面临问题,则意味着整个应用系统也会面临挑战,从而带来严重的损失和后果。
如今“大数据”这个词已经变得非常流行,虽然这个概念如何落地不得而知。但可以确定的是,随着物联网、移动应用的兴起...
2019-01-09 00:44:18 |
Database