前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「服务端思维」研习小组 第八周 研讨纪要

「服务端思维」研习小组 第八周 研讨纪要

作者头像
用户2060079
发布2019-03-18 17:13:31
1.1K0
发布2019-03-18 17:13:31
举报

每周六晚上我们几个小伙伴都会组织一个技术研讨会,就技术群里大家提出的几个有意思的问题做重点的讨论。主持人采用轮流主持的模式,本周由我负责组织和分享,这篇文章就是我们当时研习小组讨论的纪要。想要加入的小伙伴可以看文章最末尾的广告时间。

作者|后端圈「研习小组」

编辑|刁政欣

一、技术探讨

1.如何优雅的退出 Java 程序?

[北京-Java-Mr.Xi] 如何优雅的退出 Java 程序?

➤ 问题解答

[北京-后端-犀利豆]首先我们需要了解常用的 kill 命令。一般我们在 kill 进程的时候,会在命令后面增加一个信号量,一般 为 kill -9 或者 kill -15。一般来说我们的程序在关闭前需要处理一些"善后"操作,比如处理完手上的工作,关闭 socket 连接,通知上下游等。对于 -9 来说,则是直接立刻退出程序。不给程序任何的“善后时间”。而对于 -15 来说, 系统会通知程序,系统需要关闭线程,线程自己处理关闭相关的逻辑。给系统留下充足的退出时间。至于 java 如何优雅的退出 可以看看 java.lang.Runtime.addShutdownHook(Thread hook) 这个方法。

2.MySQL 哪些情况下不走索引?

[成都-JAVA后端-北极之北] MySQL 那些情况下不走索引?

➤ 问题解答

[杭州-后端-梁桂钊] [上海-后端-白文辉][北京-后端-犀利豆][上海-后端-周岩][上海-后端-钱杉杉]

  • 不要在列上使用函数和进行运算
  • 尽量避免使用 != 或 not in或 <> 等否定操作符
  • 尽量避免使用 or 来连接条件
  • 多个单列索引并不是最佳选择
  • 复合索引的最左前缀原则
  • 覆盖索引的好处
  • 范围查询对多列查询的影响
  • 索引不会包含有NULL值的列
  • 隐式转换的影响
  • like 语句的索引失效问题,注意 like “value%” 可以使用索引
  • 编码转换也可能导致索引失效。阅读:https://mp.weixin.qq.com/s/ns9eRxjXZfUPNSpfgGA7UA?from=groupmessage&isappinstalled=0

3.秒杀系统,为什么要使用 MQ?

[北京-打杂-火柴] 秒杀系统,为什么要使用 MQ?

➤ 问题解答

[杭州-后端-梁桂钊]

  • 将并发问题串行化
  • 销峰填谷,解决高并发下的流量突增
  • 限流,保证系统在消费的正常水位
  • 异步化,进行系统解耦

4.全局 ID 生成器哪家强

[上海-后端-白文辉] 全局 ID 生成器哪家强?

➤ 相关讨论

[杭州-后端-梁桂钊] [上海-后端-白文辉][北京-后端-犀利豆][上海-后端-周岩][上海-后端-钱杉杉]

  • 使用 UUID 作为分布式全局主键是最简单的方案。UUID 生成的是长度为 32 位的十六进制格式的字符串。好处在于,本地生成,时延低,扩展性好。但是,一般情况下,UUID 长度比较长,会占用更多的存储空间,并且作为主键建立索引查询效率低。
  • Twitter 开发了一套全局唯一 ID 生成服务 Snowflake。Snowflake 生成的是 64 位全局唯一 ID,由 41 位的时间序列 + 10 位的机器标识 + 13 位的计数顺序号组成。优点在于,高性能,低延迟,按时间有序。但是,需要独立的开发和部署。
  • 基于 MongoDB 的分布式 ID。MongoDB 的 ObjectId 是由一组十六进制的字符组成的 24 位的字符串,每个字节可以存储两个十六进制数字,总共使用 12 字节的存储空间。其中,前 4 个字节表示时间戳,接下来的 3 个字节是机器码,紧接的 2 个字节由进程 ID 组成,最后 3 个字节是随机数。MongoDB 的 ObjectId 对象的主键生成策略,可以比较好地解决了分布式场景下的高并发的主键唯一性问题。
  • 美团leaf:详细参考《Leaf:美团分布式 ID生成服务》
  • 全局序列表:这个方案的思路比较简单,在数据库中创建一个序列表(可能多个,解决单点故障)。当需要为某个表的生成主键 ID 时,从序列表中分配全局主键 ID,并且存入内存,每台机器先从内存中消费,使用完再去序列表获取分配的一组新的 ID 列表。

二、分享环节

[北京-后端-犀利豆] MySQL 索引漫谈?(20分钟)

  • MySQL innodb 索引 b + tree
  • b + tree 性质
  • 为什么使用 b + tree
  • 如何高效使用 innodb 索引:使用覆盖索引、索引最左原则

三、成员鸣谢

非常感谢「研习小组」成员们的聚焦交流。我们一起交流、探讨,打破认知的局限。

上海-后端-钱杉杉

北京-后端-犀利豆

上海-后端-白文辉

北京-后端-王帅景

福州-后端-陈鹏飞

上海-后端-周岩

杭州-后端-梁桂钊

...参会,但没有分享的其他小伙伴

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 犀利豆的技术空间 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、技术探讨
    • 1.如何优雅的退出 Java 程序?
      • 2.MySQL 哪些情况下不走索引?
        • 3.秒杀系统,为什么要使用 MQ?
          • 4.全局 ID 生成器哪家强
          • 二、分享环节
          • 三、成员鸣谢
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档