掘友等级
获得徽章 0
上周末去河口湖旅游了一趟。富士山还是挺壮观的。去了山梨县的矿石博物馆,买了一些亮晶晶的小石头。想买黄铁矿的标本,但是摆出来的都比较丑,没下手。还去了久保田一竹美术馆,心心念念的茶房坐了一个多小时。最后发现一个很好玩的地方……大石,就在虹吸诺亚前面,非常推荐。
每节课干货最多的就是最后的部分。会有很多书本上没有的字节实践。有助于理解是怎么一步步变成现在这样复杂的架构的。比如redis的代理。处理大key。大key是string类型value大于10kb。hash/set/zset/list元素个数大于5000或者value大于10Mb。拆分压缩大key,侧重考虑解压时间,例如json格式用messagepack算法。集合类结构区分冷热,长尾数据走db。热key是QPS较高超过500的key,解决方式设置localcache。比如2s缓存过期才请求一次redis。
字节跳动服务治理重试策略。1. 限制重试比率,重试次数是时间窗口1%,大部分都是调用都是成功的才需要重试。2. 防止链路重试。理想情况下只有最下层发生重试,返回特殊的状态码。3. Hedged requests应对延时过高问题。
第十三节课《微服务架构原理与治理实践》从服务注册中心到微服务。有点理解了k8s到底在干什么了。服务发布的部分,负载均衡,稳定性治理。 讲到限流熔断降级的时候一点既视感。之前别的课好像讲过了……
补消息队列课程。常见的消息队列有Kafka和RoketMQ。Kafka的特点是分布式,分区的,多副本日志提交服务比较适合高吞度量的情况。RocketMQ的特点是低延迟,强一致性,高可靠,比较适用于实时场景。
Redis是单线程处理命令。一些常用的数据结构:1. 消息通知使用了QuickList,相当于双向链表+listpack,listpack是多个elements的集合。2. 一个用户有多项计数需求用Hash Tale, dict数据结构采用拉链式处理hash冲突。渐进式rehash的过程是用旧+新两个dict头,慢慢迁移数据,完全迁移结束再切换成新头。3. zset数据结构ZSkipList实现排行榜功能。
今天稍微休息了一下,整理了一下之前的学习内容。落下了一节课,明天早起补课~加油加油!感觉理论课好多,我还是不知道怎么做大项目。还是多花时间,找找别的资源吧。想在这么短的时间内完全从零开始还是挺不容易。
go语言中database/sql包的作用是在应用程序与数据库之间增加一层封装。用drive接口来统一操作不同类型的数据库。处理返回数据有3种方式:1. Exec/ExecContext->Result 2. Query / QueryContext -> Rows(Columns) 3. QueryRow/QueryRowContext->Row(Rows简化,单行)
分布式数据解决了单体数据库难以扩展的问题。利用存储池(storage pool)技术,数据库不再感知实际的物理资源,不需要知道存储池的细节。
下一页