粉丝76获赞848

你应该背过很多高可用的面试题吧,一堆福气,一会这个机器挂了,一会那个服务崩了,就问你怎么保证服务高可用,怎么保证数据不丢失? 没见过这样面试题的朋友,可以在评论区敲个八八八,我看看还有多少如此单纯的程序员。这时候很多朋友就要吐槽了,那这就是典型的面试照火箭工作拧螺丝啊。 但是如果抛开这些面试题,现在就是问你,真的让你去负责一个对数据非常敏感的金融系统,面对非正常断电这种具体的不可抗力,你会怎么去保证数据的安全呢? 你可以把视频先暂停两秒,在评论区留下你的想法,不过请千万别说你的服务器有 ups 这样的答案了,咱们是来讨论技术的,不是来说相声的。看完视频后,再来看看你的想法是不是成熟。 接下来我们要讨论的核心其实就两个字,刷盘。你可能觉得这东西很理论,工作用不上,那么这一次我也不来虚的,我会从理论到实战跟你来分析刷盘这个事儿。然后 我们从 rocket mq、 卡夫卡、 rippy mq 这三个重要的 mq 工具来分析一下,看看他们是如何设计刷盘策略的。针对数据安全这个事儿,他们是怎么小题大做的, 还是要强调这些内容非常的硬核,甚至我估计大部分的朋友看一次都是看不明白的,所以点赞收藏,这样可以回头多看几遍。 我是楼兰,咱们技术走起!首先我们要搞清楚为什么服务器断电会丢数据,原因很简单,就内存,它是容易丢数据的,硬盘才是永恒的。废话,这谁不知道啊,不过这跟数据有什么关系呢?哎, 我们都知道内存读写快,硬盘读写慢,所以操作系统为了提升运行速度,他也耍了个小聪明。在操作系统的底层, 也就是我们常说的内核态,它是不允许用户态的应用程序直接接触硬盘啊,网卡这样的一些硬件的,它只允许应用程序调用内核态暴露的接口,也就是系统调用来完成数据的读写。 比如在 linux 系统当中,就提供了一个 write 方法来完成数据的写入,像这样, 你只要调一下 write 方法,通知操作系统,我要写入数据,剩下的事就交给操作系统的内核态去完成了。 但这时操作系统会耍个小聪明,它其实并不会真正地去写硬盘,而是把数据拷贝到内存里的 page catch 页缓存当中,然后就马上给你返回说写完了,写成功了,但这个时候数据其实还停在内存, 如果这个时候出现了非正常的断电,那配置开启,里面的数据瞬间就会灰飞烟灭。你以为你存下来了,其实你存了个寂寞。那要怎么保证数据安全呢?这就需要进行刷盘, 也就是要把页缓存当中的数据写入到硬盘当中,这样即使服务器断电了,硬盘里的数据也不会丢失。 但接下来的问题就是,什么时候刷盘呢?大部分情况下,操作系统是在内核态自己去协调什么时候刷盘的,作为应用程序,你是无法知道操作系统什么时候刷盘的。 也就是如果出现非正常的断电了,作为用户态的应用程序,你能做的就只是烧个高香,然后默默的祈祷数据不要丢了, 要是这样,那还玩的下去吗?于是操作系统给我们留了个后门,也是唯一的救命稻草 fink 就是 这个方法。 fink 的 指令非常的霸道,它其实就是相当于乐令操作系统。别废话,现在立刻马上把配置开启,你的脏数据刷到物理硬盘上,不写完不许返回, 只有 fink 执行成功了,数据才能真正地落地为安。所以判断一段代码安不安全,就要看它到底是在用 right 忽悠你,还是在用 fink 来给你托底。 原理懂了,但这些操作系统层面的小九九和我天天写 hello world 有 什么关系呢?关系大了,接下来上加吧。下面这里有两个方法啊,都可以实现往操作系统上的写入一个文件,就在文件里面写一百个 a, 这个逻辑很简单, 嗯,执行后的效果其实也都是一样的,就是我们这里写入一个字母嘛,对吧?但是这两个不同的方法,它们在底层执行过程当中有什么区别呢? 在 linux 中就可以安装一个指令,叫做 stress, 通过这个指令可以查看所有应用程序,它的调用情况怎么样。 比如说我这里呢,已经有一个这样的 linux 操作系统,然后呢,我把之前的 file l demo 一 和 file demo 二都已经放到了服务器上面去,那么接下来我就可以用 stress 指令来看一下执行这两个加法代码,它们的底层执行逻辑有没有什么区别。 指定一个前缀, file demo 一 好,执行完成之后呢,这里就会生成很多这样的日制文件,这些日制文件就是 加法当中的每一个县城,它所对应的这些系统调用的日制文件。从这里可以看到,你即便是执行一个 hello world 这样的程序,其实在加法顶上都要启动非常非常多的县城。你看到这儿,你还会觉得像我们经常 要强调的什么 a q s 啊,并发呀,是跟你的业务没关系吗?啊,最远的啊,我们来看一下这个核心的日制,核心日制呢,通常是这个最大的这个文件啊,我们看一下这个文件, 这个日制文件里面每一行就是一个系统调用,我们要找的是一个 right 方法,就这些 a 字母是怎么写进去的? 在这里啊,可以看到这里山调用了一百次这个 write 方法,就是我们要写入一百个 a 字母,那每次写入山都是调用一次 write 方法, ok, 好, 重点在这里,调用完 write, 写完一百次这个 a 字母了之后,接下来它马上跟的就是一个 close, 并没有调用 fink, 所以 这个时候这些 a 字母实际上是写入到了 page catch 缓存当中,并没有写到词典里面。另外一个方法,它的效果又是什么样的呢?我们再来看 这几个前缀, f 二、 file 二, 好,我们还是来看一下这个核心的日期文件,同样我们要找那个最核心的 write 好,核心在这里找到了,看啊,因为我们在代码当中把这个一百个 a 字符啊,放到了一个 buffer 里面缓存里面,所以呢,这次写入的时候,实际上只要调一次 write 的 方法就可以了啊,这其实也是一种提速, 所以呢,这种写入方法你能想到它写入数据的速度肯定会比我们之前第一个方法要快一点。好,接下来往下看核心在这儿,在它调用一次 close 方法之前,马上就调用了一次 fink, 意味着它就进行了一次刷盘, 所以看懂了吗?对应我们之前代码就能看到,当我们使用 file channel 这个类来写代码的时候, 它的这个 force 方法实际上就会真正的触发一次 fink 的 系统调用,把数据写入硬盘。而相比之下呢,我们之前用那个 file output stream 它的 flash 方法,其实在系统调用层面, 它什么事都没干,什么方法都没掉,是一个空的。所以对比这两个方法,你是不能够看明白它们在数据安全层面会有什么区别吗? 当我们使用之前第一种方法的时候,数据写入 page catch 缓存,那其实过后一段时间操作系统自己会把它写到此盘,也就没什么区别了。 但是如果出现了非正常的关机,数据还没有写入到硬盘当中,那么这些在 page catch 缓存当中的数据就已经全部丢了。而相比之下, 我们用那个 file channel 的 方法,用它来写入数据的时候,写入完成调一次那个 false 方法,它马上就会触发一次数据刷盘,这时候即便出现了非正常当关机,这些数据也依然不会丢失。 所以你看懂了吗?你的每一行代码都不是信手拈来的工具,我们现在能够用好 right 和 fink 这两个绝世武器之后呢?接下来就是如何在项目当中去规划这些系统要用了。这个事儿说起来就太复杂了, 用功夫来做比喻啊,那就是已经进入到了乾坤大挪移的最高境界了。怎么说呢,就是看到了你也不一定会,会了你也不一定就是个绝顶高手。 write 方法虽然不安全,但是它只要写编辑 catch, 所以 它快啊。 fink 虽然更安全,但是它要写字盘相比 write 肯定要慢很多啊,你频繁调用就会加大操作系统的负担,那到底要怎么去取舍呢?这事太难了, 所以这一次我就不再自己去瞎设计什么方案了,直接带你来看一看 rocket mq、 卡夫卡和 rapid mq 这三个真正的武林高手,他们是怎么在极限性能和数据安全之间做平衡的。我们先来看这个 rocket mq, 对于 rocket and q 啊,我们知道它是可以在配置文件当中简单的就配置同步刷盘还是异步刷盘的。其中异步刷盘呢,就比较好理解了,就是不主动进行刷盘嘛,把刷盘这个事交给操作系统去处理就完事了。我们重点就要看这个同步刷盘的机制,简直就是教科书级别的设计。 所谓同步刷盘哦,字面理解就是来一个消息就调一次, fink, 刷盘完成了在同步的告诉客户端消息成功了。 但是你要知道, rocket mq 这可是设计为单机每秒几十万 tps 的 超高性能系统的,这么频繁的刷盘操作系统,它能撑得住吗? 于是 rocket mq 针对同步刷盘来了一招精妙至极的移花接木,它设计了两个队列,一个叫做写队列 request to read。 当生产者发过来的刷盘请求,不管是由哪个现成过来的, 那最终都会先把它全部的怼到这个写对列里面去。后台会起一个县城 group commit service, 这个县城它会负责定时的把写对列和读对列进行互换,默认是每十毫秒进行一次, 然后它会对着读对列里这一批积攒的请求执行一次 fink, 把一批数据一起进行刷盘。这招就叫 group commit 主提交策略, 用一次 f signal 的 成本搞定了一批消息的持久化,既保证了数据绝对不丢,又把性能拉到了极限。这种精妙的设计就是 rock mq 作为 mq 当中的后来者爆发出来的能量。好,接下来我们再来看这个 rapid mq。 rapid mq 呢,相对比较传统, 它是通过队列的形式来管理数据的,现在对于它最经典的这个传统队列,也就是 classic queen, 你 只要简单地把队列声明为持久化就可以了。接下来只要往这个队列里发消息, rapid, 它就会把数据去进行持久化的操作,保证数据的安全。 但是数据真的安全吗?他的词句划分是怎么处理刷盘这个问题的呢?哎,这个就不用我来做详细分析了,官网上一段话很明白的解释了他的策略,你可以看一下,这呢是 rapid mq 的 官网, 在他关于这个 workclean 模式的描述当中啊,就有一段非常经典的描述,就在这 就这段 note, 你 可以仔细看一下这段这段英文啊,这里就很明确的说了,把一个队列声明成持久化,并不能够完全的保证消息不会丢失,然后呢,并不会为每个消息调用一次刷盘操作, 所以呢,存在一个间隔,就是数据还在缓存,没有写到词盘。如果你需要更强的安全保证,你可以选择使用 publish conference 机制,看明白了吗? 这里就很明确地告诉你了,那并不会为每个消息都去调用 fink。 所以呢,你可以用这个 publish 登记等其他的机制来保证消息安全。这个 publish 登记呢,实际上是一种生产者确认或者从事的机制,来保证消息的安全。 另外呢,其实 rapid and q 也设计了像 cora 仲裁队列,还有像 stream 流逝队列等等其他类型的队列,用另外的思路来保证数据安全。 也就是说,在数据刷盘这个场景下, rapidmq 是 没有做过于精细的设计的,其目的其实就是为了提高运行的速度。聊完了 rapidmq, 再来看看我们的老大哥卡不卡? 卡夫卡呢,它对于性能的追求是最极致的,所以它的刷盘招式也是最激进的。在卡夫卡的配置文件当中,针对日制刷盘提供了一系列的参数,可以自由的配置。最关键的就这两个,第一个 log 点 flash 点 interval 点 messages 表示隔多少条消息触发一次刷盘。 然后呢,下面这个 log 点以 flash 零 over 点 ms 表示每隔多长时间触发一次刷盘。关注一下它的这个默认值啊,这个基本上就是一个天文数字, 而这个时间呢,是个空。这种参数配置意味着卡福卡在它的默认配置里,它是完全放弃了主动地用 fink 的, 他把刷盘的工作全全扔给了操作系统,这意味着单机卡福卡遇到服务器非正常断电的情况下,是很有可能丢失数据的。 当然,其实这也并不能简单地说卡夫卡的数据就不安全哦。实际上,卡夫卡还可以依靠它的 a、 c、 k 应答机制,包括它的疾群、 riplik、 多副本机制等等其他机制,整体上的来保证数据安全。只不过, 在我们今天讨论的日制刷盘这件事情上,卡布卡优先选择的是极致性能,而数据安全放在了次要的位置。看懂了这几个高手的刷盘操作,当然你没有必要全盘照搬他们的操作,因为不同的系统总是会有不同的设计, 就像倚天屠龙记的乾坤大挪移,你很厉害,但总有比你更厉害的武功。而且针对刷盘这个问题上,你配上 ups, 使用带电池的 red 卡,或者直接升级的更安全的云服务器,你几乎就不用考虑服务器非正常断电的情况了。 但是这些前人留下的经验和思考,始终都是助你快速成长的养分。就像打仗当然是需要靠火药的,但是强身健体、练武防身也是每个战士的必修课。 最后,我想送大家一句话,我们在职场上、生活中经常会有很多灵光一闪的想法,会有很多完美的计划,但请记住,想到了仅仅是写入了 page catch, 做到了才是执行了 fink 那 些停留在 page catch 的 想法看似美好,但一场突如其来的断电,可能是岁月的变迁,可能是环境的动荡,就能让它瞬间归零。 认知是虚幻的缓存,执行才是落地的磁盘。别让你的才华死在了断电的那一刻,记得给你的人生多做几次 fink。 我是 楼兰,关注我, it 路上一起进步,接下来我们评论区见。

真的让你去负责一个对数据非常敏感的金融系统,面对非正常断电这种具体的不可抗力,你会怎么去保证数据的安全呢? 你可以把视频先暂停两秒,在评论区留下你的想法,不过请千万别说你的服务器有 ups 这样的答案了,咱们是来讨论技术的,不是来说相声的。看完视频后,再来看看你的想法是不是成熟。 接下来我们要讨论的核心其实两个字,刷盘。你可能觉得这东西很理论,工作用不上,那么这一次我也不来虚的,我会从理论到实战跟你来分析刷盘这个事。然后 我们从 rocky m q 卡不卡, rocky m q 这三个重要的 m q 工具来分析一下,看看他们是如何设计刷盘策略的。针对数据安全这个事,他们是怎么小题大做的。 另外,我还整理了一百万次面试题库,学习路线、简历模板、公开课试听。我是楼兰,咱们技术走起!首先我们要搞清楚为什么服务器断电会丢数据,原因很简单,就内存,它是容易丢数据的,硬盘才是永恒的。 废话,这谁不知道啊,不过这跟数据有什么关系呢?哎,我们都知道内存读写快,硬盘读写慢,所以操作系统为了提升运行速度,他也耍了个小聪明。在操作系统的底层, 也就是我们常说的内核态,它是不允许用户态的应用程序直接接触磁盘啊,网卡这样的一些硬件的,它只允许应用程序调用内核态暴露的接口,也就是系统调用来完成数据的读写。 比如在 linux 系统当中,就提供了一个 write 方法来完成数据的写入,像这样, 你只要调一下 read 方法,通知操作系统,我要写入数据,剩下的事就交给操作系统的内核态去完成了。 但这时操作系统会耍个小聪明,它其实并不会真正地去写硬盘,而是把数据拷贝到内存里的 page catch 页缓存当中,然后就马上给你返回,说写完了,写成功了,但这个时候数据其实还停在内存, 如果这个时候出现了非正常的断电,那配置开启,里面的数据瞬间就会灰飞烟灭,你以为你存下来了,其实你存了个寂寞。那要怎么保证数据安全呢?这就需要进行刷盘, 也就是要把页缓存当中的数据写入到硬盘当中,这样即使服务器断电了,硬盘里的数据也不会丢失。 但接下来的问题就是,什么时候刷盘呢?大部分情况下,操作系统是在内核态自己去协调什么时候刷盘的。作为应用程序,你是无法知道操作系统什么时候刷盘的。 也就是如果出现非正常的断电了,作为用户态的应用程序,你能做的就只是烧个高香,然后默默的祈祷数据不要丢了,要是这样,那还玩的下去吗? 于是操作系统给我们留了个后门,也是唯一的救命稻草 f sync 就是 这个方法。 f sync 的 指令非常的霸道,它其实就是相当于乐令操作系统。别废话,现在立刻马上把配置开启,你的脏数据刷到物理硬盘上,不写完不许返回, 只有 fink 执行成功了,数据才能真正地落地为安。所以判断一段代码安不安全,就要看它到底是在用 right 忽悠你,还是在用 fink 来给你托底。 原理懂了,但这些操作系统层面的小九九,和我天天写 hello world 有 什么关系呢?关系大了,接下来上加吧。下面这里有两个方法啊,都可以实现往操作系统上的写入一个文件,就在文件里面写一百个 a, 这个逻辑很简单, 执行后的效果其实也都是一样的,就是我们这里写入一个字母嘛,对吧?但是这两个不同的方法,它们在底层执行过程当中有什么区别呢? 在 linux 中就可以安装一个指令,叫做 stress, 通过这个指令可以查看所有应用程序,它的调用情况怎么样。 比如说我这里呢,已经有一个这样的 linux 操作系统,然后呢,我把之前的 file l demo 一 和 file demo 二都已经放到了服务器上面去,那么接下来我就可以用 stress 指令来看一下执行这两个加法代码,它们的底层执行逻辑有没有什么区别。 指定一个前缀 file l demo 一 好,执行完成之后呢,这里就会生成很多这样的日制文件,这些日制文件就是 加法当中的每一个县城,它所对应的这些系统调用的日制文件。从这里可以看到,你即便是执行一个 hello world 这样的程序,其实在加法顶上都要启动非常非常多的县城。你看到这儿,你还会觉得像我们经常 要强调的什么 a、 q、 s 啊,并发呀,是跟你的业务没关系吗?啊,最远的啊,我们来看一下这个核心的日制,核心日制呢,通常是这个最大的这个文件啊,我们看一下这个文件, 这个日制文件里面每一行就是一个系统调用,我们要找的是一个 right 方法,就这些 a 字母是怎么写进去的? 在这里啊,可以看到这里,删调用了一百次这个 write 方法就是我们要写入一百个 a 字母,那每次写入删都是调用一次 write 方法, ok, 好, 重点在这里,调用完 write, 写完一百次这个 a 字母了之后,接下来它马上跟的就是一个 close, 并没有调用 fink, 所以 这个时候这些 a 字母实际上是写入到了 page catch 缓存当中,并没有写到词典里面。另外一个方法,它的效果又是什么样的呢?我们再来看 这几个前缀, f 二 file 二 好,我们还是来看一下这个核心的日期文件,同样我们要找那个最核心的 write 好,核心在这里找到了,看啊,因为我们在代码当中把这个一百个 a 字母啊放到了一个 buffer 里面缓存里面,所以呢,这次写入的时候,实际上只要调一次 write 的 方法就可以了啊,这其实也是一种提速, 所以呢,这种写入方法,你能想到它写入数据的速度肯定会比我们之前第一个方法要快一点。好,接下来往下看核心在这儿,在它调用一次 close 方法之前,马上就调用了一次 fink, 意味着它就进行了一次刷盘。 所以看懂了吗?对应我们之前代码就能看到,当我们使用 file channel 这个类来写代码的时候, 它的这个 force 方法实际上就会真正的触发一次 fink 的 系统调用,把数据写入硬盘。而相比之下呢,我们之前用那个 file output stream, 它的 flash 方法,其实在系统调用层面, 它什么事都没干,什么方法都没掉,是一个空的。所以对比这两个方法,你是不能够看明白它们在数据安全层面会有什么区别吗? 当我们使用之前第一种方法的时候,数据写入 page catch 缓存,那其实过后一段时间,操作系统自己会把它写到此盘,也就没什么区别了。 但是如果出现了非正常的关机,数据还没有写入到硬盘当中,那么这些在 page catch 缓存当中的数据就已经全部丢了。而相比之下, 我们用那个 file channel 的 方法,用它来写入数据的时候,写入完成调一次那个 false 方法,它马上就会触发一次数据刷盘,这时候即便出现了非正常当关机,这些数据也依然不会丢失。 所以你看懂了吗?你的每一行代码都不是信手拈来的工具,我们现在能够用好 right 和 fink 这两个绝世武器之后呢?接下来就是如何在项目当中去规划这些系统要用了。这个事儿说起来就太复杂了, 用功夫来做比喻啊,那就是已经进入到了乾坤大挪移的最高境界了,怎么说呢,就是看到了你也不一定会,会了你也不一定就是个绝顶高手。 write 方法虽然不安全,但是它只要写编辑 catch, 所以 它快啊。 fink 虽然更安全,但是它要写字盘,相比 write 肯定要慢很多啊,你频繁调用就会加大操作系统的负担,那到底要怎么去取舍呢?这事儿太难了, 所以这一次我就不再自己去瞎设计什么方案了,直接带你来看一看 rocket mq 卡夫卡和 rapid mq 这三个真正的武林高手,他们是怎么在极限性能和数据安全之间做平衡的。我们先来看这个 rocket mq, 对于 rocket and q 啊,我们知道它是可以在配置文件当中简单的就配置同步刷盘还是异步刷盘的,其中异步刷盘呢,就比较好理解了,就是不主动进行刷盘嘛,把刷盘这个事交给操作系统去处理就完事了。我们重点就要看这个同步刷盘的机制,简直就是教科书级别的设计。 所谓同步刷盘啊,字面理解就是来一个消息就调一次 fink, 刷盘完成了在同步的告诉客户端消息成功了。 但是你要知道, rocket mq 这可是设计为单机每秒几十万 tps 的 超高性能系统的,这么频繁的刷盘操作系统,它能撑得住吗? 于是 rocket mq 针对同步刷盘来了一招精妙至极的移花接木,它设计了两个对列,一个叫做写对列 request to read。 当生产者发过来的刷盘请求,不管是由哪个现成过来的, 那最终都会先把它全部的怼到这个写队列里面去。后台会起一个县城 group commit service, 这个县城它会负责定时的把写队列和读队列进行互换,默认是每十毫秒进行一次, 然后他会对着独对类的这一批积攒,积攒的请求执行一次 fink, 把一批数据一起进行刷盘。这招就叫 group commit 主提交策略,用一次 fink 的 成本搞定了一批消息的持久化, 既保证了数据绝对不丢,又把性能拉到了极限。这种精妙的设计就是 rock mq 作为 mq 当中的后来者爆发出来的能量。好,接下来我们再来看这个 rapid mq。 rapid mq 呢,相对比较传统, 它是通过队列的形式来管理数据的,现在对于它最经典的这个传统队列,也就是 classic queen, 你 只要简单地把队列声明为持久化就可以了。接下来只要往这个队列里发消息 rapid, 它就会把数据去进行持久化的操作,保证数据的安全。 但是数据真的安全吗?他的词句划分是怎么处理刷盘这个问题的呢?哎,这个就不用我来做详细分析了,官网上一段话很明白的解释了他的策略,你可以看一下,这呢是 rabbit mq 的 官网, 在他关于这个 workclean 模式的描述当中啊,就有一段非常经典的描述,就在这, 就这段 note, 你 可以仔细看一下这段这段英文啊,这里就很明确的说了,把一个队列声明成持久化,并不能够完全的保证消息不会丢失,然后呢,并不会为每个消息调用一次刷盘操作, 所以呢,存在一个间隔,就是数据还在缓存,没有写到词盘。如果你需要更强的安全保证,你可以选择使用 publish conference 机制,看明白了吗? 这里就很明确地告诉你了,那并不会为每个消息都去调用 fink, 所以呢,你可以用这个 publish 登记等其他的机制来保证消息安全。这个 publish conference 呢,实际上是一种生产者确认或者从事的机制,来保证消息的安全。 另外呢,其实 rapid and q 也设计了像 cora 仲裁队列,还有像 stream 流逝队列等等其他类型的队列,用另外的思路来保证数据安全。 也就是说,在数据刷盘这个场景下, rapidmq 是 没有做过于精细的设计的,其目的其实就是为了提高运行的速度。聊完了 rapidmq, 再来看看我们的老大哥卡不卡。 卡夫卡呢,它对于性能的追求是最极致的,所以它的刷盘招式也是最激进的。在卡夫卡的配置文件当中,针对日制刷盘提供了一系列的参数,可以自由的配置。最关键的就这两个,第一个 log 点 flash 点 interval 点 messages 表示隔多少条消息触发一次刷盘。 然后呢,下面这个 log 点以 flash 零 over 点 ms 表示每隔多长时间触发一次刷盘。关注一下它的这个默认值啊,这个基本上就是一个天文数字, 而这个时间呢,是个空。这种参数配置意味着卡福卡在它的默认配置里,它是完全放弃了主动地用 fink 的, 他把刷盘的工作全全扔给了操作系统,这意味着单机卡福卡遇到服务器非正常断电的情况下,是很有可能丢失数据的。 当然,其实这也并不能简单地说卡芙卡的数据就不安全哦。实际上,卡芙卡还可以依靠它的 a、 c、 k 应答机制,包括它的疾群、 ripple、 卡多副本机制等等其他机制,整体上的来保证数据安全。只不过,在我们今天讨论的日制刷盘这件事情上,卡芙卡优先选择的是极致性能, 而数据安全放在了次要的位置。看懂了这几个高手的刷盘操作,当然你没有必要全盘照搬他们的操作,因为不同的系统总是会有不同的设计,就像倚天屠龙剑的乾坤大挪移,你很厉害,但总有比你更厉害的武功。 而且针对刷盘这个问题上,你配上 ups, 使用带电池的 red 卡或者直接升级的云服务器,你几乎就不用考虑服务器非正常断电的情况了。

jenkins 在 部署 java 服务时可能需要不同的 java 环境,接下来实际操作如何选择不同的 jdk 和 maven 版本?登录到 jenkins 所在的服务器,将提前下载好的 jdk 上传至服务器, 这里面上传 jdk 十一测试,具体根据需要下载对应的版本解压文件, 记住文件目录后面需要使用。接下来登录 jenkins 控制台,点击系统设置, 点击全局配置, 找到 jdk 安装,并点击 填写别名为 j d k 十一,注意后续需要用到这个别名。填写 java home 未刚刚解压文件后并所在目录 如果有多个 j d k, 就 新增多个。接下来安装 mate, 找到 mate 安装,点击此处已经安装,如果没有安装,填写名称,选择对应版本即可。注意此处的名称后续也要使用。 保存完成后新建任务, 选择一个已有的模板进行修改。 在打折二包处引入工具,指定 mate 版本, show 脚本处打印下对应的版本,检验是否正确。 接下来构建,看下效果。查看日制, 可以看到 mate 版本信息为刚刚新增的版本,并且可以看到使用的系统默认的 j d k 十七版本。接下来再修改下配置, 将 mate 三点五修改为 mate 三点九,并修改 j d k 版本为刚刚安装的 j d k 十一, 修改完成保存后继续构建。 再次查看构建日制,可以看到 mate 版本为三点九了,并且 jdk 版本也变为 jdk 十一了。

本期教程带你搭建联机无际旅人服务器,流程很简单,按照步骤操作即可完成。我们使用云服务器来部署,这样服务端在云端运行不会占用你的电脑,性能还能二十四小时稳定在线,朋友们随时都能进服,而且延迟最低 也仅有个位数。那么话不多说,马上开始安装吧。首先下载无际旅人的客户端和服务端资源,打开网页后,点击所有整合包,找到无际旅人这篇文章, 往下滑到部署,准备点击下载按钮,跳转到作者的网盘进行下载。这两个是客户端文件,选择其中一个下载就可以了。下载完成后,点击服务端文件夹,我们稍后需要用到这个文件,这是开福用的,作者在这里更推荐使用 java 二十五,并且也附带了文件, 需要什么先保存到网盘再统一下载就好了。接下来我们安装客户端,把下载好的客户端文件拖入我的世界启动器内,就开始自动下载安装了。 注意是客户端文件,不是服务端文件,不要拖错了。本视频演示的是 pcl 二启动器,其他启动器也是类似操作。下载完成后就可以启动游戏客户端开始游玩了,如果你只想单人游戏,到这一步就可以了, 如果想和小伙伴联机,就继续往下看。我们需要购买一个云服务器,可以在浏览器里进行搜索, 也可以点击视频简介下方的链接进行跳转,点击立即前往。无际旅人整合包对性能要求较高,这里推荐元光云的五九五零 x 四和十二 g 或七九五零 x 四和十二 g, 其他默认即可, 如果同时在线人数多,建议按需增加内存,若发现任务管理器中贷款资源占用较高,也可以适当提升贷款。 up 主现在也给大家争取到福利了, 给大家准备了大量的八折券,可以直接访问视频下方的链接,来到这个页面后绑定 up 主为代理商,完成后私聊 up 主就可以把优惠券送给大家了。接下来我们打开源光云的控制台,点击端口映射, 如果选择的是 windows 系统,则点击三三八九远程端口,点击确认后再添加一个 minecraft 的 二五五六五端口,添加完成后,点击上方的 r d p 远程连接,下载 m s t s c 配置文件账号默认是 administrator, 密码就是购买云服务器时设置的密码。 接下来我们部署服务端,把下载好的服务端压缩包从自己电脑复制,再在远程桌面粘贴,就可以进行文件传输。传输完成后先解压一下服务端文件夹,解压的时候可以先下载一个 java 环境, 我们继续来到整合包作者的网盘,选择这个文件夹,下载这个 java。 二十五, up 主是在自己电脑上演示的,并且已经下载好了 java, 就 不演示安装过程了,安装的时候一直下一步就可以了。安装完成后,我们打开服务端文件夹, 使用记事本打开,启动脚本编辑一下。我们修改一下内存设置,将这里的实际删除,修改成服务器最大内存减三 g, 根据自己服务器内存进行设置,比如你服务器最大内存为十二 g, 那 么这里就设置九 g 就 可以了,修改完成后保存并退出。 双击打开启动脚本,稍微等待一会儿。这是让我们同意优乐协议,在这里直接输入一个处就可以了,回车确认, 耐心等待一会儿。第一次启动叫慢,需要补全服务端文件,等它跑马不动后,可以输入 list, 出现在线人数,则说明开服成功了。开服成功后,回到远光云控制台,点击防火墙内网 ip 二五五六五端口对应的公网连接 ip 就是 给小伙伴的进服 ip。 那 本期视频到这里已经结束了,如果本期视频对你有帮助,记得一键三连关注 up 主,那么我们下期再见!

今天灭了一个五年经验的 java 后端,前面八股文对答如流。于是主办问了一个高频场景题,如何设计一个支持千万级用户的高性能及时通讯系统,结果候选人一下子卡住了,完全没有思路。这其实暴露了很多资深工程师的通病,就是缺乏对高并发实时系统的全列路架构能力。 如果你也经常被这类场景题难住,建议看看我这份我整理的高频场景题,有需要的可以拿去,希望对你们有所帮助。主播所期待的完整方案应该是这样的, 一、连接层设计用。 net 实现 web socket 长连接服务器通过一致性哈希绑定用户与网关连接,支持连接绑活断线重连,单机支撑十万连接。第二, 消息,路由消息先写入咖啡 a 分 区,由路由服务根据接收者在线状态推送到对应网关,离线消息存入 radis 暂存,上线后拉取。第三,存储,设计最新消息存 radis 服务器, set 一时消息用 h 贝斯分瑞警存储,单聊、群聊系统消息分别设计存储结构。第四,扩展性网关无状态,可水平扩展消息路由服务,通过监听 c、 f、 c 实现解偶数据库按 u、 a、 d 分 库分表。第五,可能性 消息必达,通过 a、 c、 k 确认,加重视机制,消息顺序通过发送端序号保证监控连接数,消息延迟,消息丢失率。个人觉得,五年经验开发者 本该具备复杂系统的架构能力,能设计出可扩展到可用的实时系统,但很多人还停留在 c、 r、 u、 d 和简单微服务层面。我的建议是建立自己的分布式系统知识体系,从协议选型、 tcp web socket、 网络编程、消息、中间件 存储方案到监控告警,每个环节都要深入实践。如果还不知道如何系统提升,可以带着具体问题参考我刚才提到的场景题库,针对性的查漏补缺。

今天我们来说下如何下载加哇二十五,因为我的世界二六点一啊,现在他需要加哇二十五,因为加哇二十五,大家注意啊,我给大家讲个常识啊,加哇他并不是说只有一个地方可以下载加哇啊加哇有非常非常多的版本, 对不对?有微软的,有甲骨文公司的,还有一些腾讯的啊,第三方公司的,那有,特别是有些开服务器的这个服主啊,他是需要单独去下载一个 java 二十五的啊,你看这些启动器啊,像这个 pcl 二, hmcl 啊,还有包括中主用的这个, 这个 mris, 它都是无感的,就是包括官方启动器啊,还有这个 cf 二十五,这个铁证平台都是可以帮我们自动下载这个 java 二十五的啊, 这个玩客户端的不用太在意,主要是有些开服务器的 pc 二啊,目前他最新版本的,因为我用的是快照版的嘛。 呃,可以帮我自动下载 java 二十五了,刚刚更新的啊,可能不知道你们能更新了没有,第一个网站的话,这个网站中注其实已经分享了非常多次啊,到时候中注会把这两个网站,一个是微软的下载源啊,第二个是这个的下载源,那么这个是我比较喜欢的一个网站啊,因为这个网站里面 比较全 java 啊,就是包括 windows 啊, linux 这个网站啊,你可以看到这里有 java 二十一和二十五,还有 java 十七, java 十一、 java 八,好像就是为 mc 量身定制的,你们知道吧,这几个,因为这几个就是现在目前的 mc 常用的几个 java 啊,然后这下面选这个市场系统, 那么这里其实再往下面滑,他有不同的版本,有些是绿色版,我建议大家装那个绿色版,比如说这个 zippo 的, 就是不用安装的,免安装的,因为安装包的话,他会改你系统的 java 变量啊,具体就是说把你的 java 的 默认改成 java 二十五啊,因为有些时候你可能电脑里有多个 java, 对 吧?他改成二十五之后可能会有些问题,就是这个第一个问题啊,第二个是这个 微软的啊,这是微软的 open gdk, 那 么这下面的话也有 java 二十五,嗯,微软是我的世界的母公司,所以说微软的 java 的 话,肯定是非常适合这个 我的世界的。那这里有几个版本啊? linux 是 mac, mac os, 然后是视窗啊,视窗这里有个 excel, 大家注意这个 excel 的 话是绿色版,我建议大家选择选择这个 excel 就 可以了。 ok, 所以说这两个网站的话都分享给大家,如果大家下载不下来的话,到时候中途也会把它分享到这个视频的简介,对吧?你们可以直接在视频的简介下载到这个包, 呃,也可以在那个,如果你看不到这个这个视频简介的话,你可以直接点这个分享本视频啊,有个分享链接,然后打开这个软件就能下载到 java 二十五了。好,那么今天视频就给大家分享到这里。

向大家汇报一下我这个项目的大致架构,首先在流量入口处,这里准备两台 nx 服务器,一台作为主,一台作为备,当主 nx 服务器挂掉之后,那么备用这台 服务器的话,自动进行流量转发。但是这里会遇到一个问题,就是虚拟 ip 就是 eip 的 申请,在一些服务器厂商可能他不支持这个技术, 所以的话如果一 ip 申请不下来,那么最终的话只会使用一台 nxt 做流量转发。接下来注册中心使用的是奈克斯 计划,使用的是三台服务器做一个集群,就防止单台 nxt 挂掉之后这个服务访问不了。接下来数据存储选用的是麦 cq, 它的版本是八点四点七,然后集群方式选用的是 mgr 计划的话,也是使用三台服务器来做 myc q m 七 r 的 集群。紧接着是 radis 的 集群,这里选用的是 radis 的 克拉斯的集群, 计划的话也是使用三台服务器来做这个克拉斯的集群。然后项目中还施到一个 mq 的 计数器,就是消息中间键,这里使用的是 ruby mq 计划,也是使用三台服务器来做一个集群。这个 dos 是 做数据分析用的,把 myspace 里面的数据同步到 dos 里面,然后的话 最终数据分析查询的数据,那么就从这个 dos 里面来查询,做一个数据分析。这个图上还有一些其他技术没有列出出来,后面我会把这些技术陆续的补全。

本期视频将为大家详细讲解近期热门整合包 beta mc 五的服务器搭建流程。虽然此前我们已经制作过一期相关教程,但随着整合包版本的更新迭代,原有教程部分内容已不再适用, 因此本期视频将基于最新版本为大家重新梳理完整的搭建步骤。那么话不多说,马上开始安装吧。首先下载 better mc 五的客户端和服务端资源,打开网页后点击所有整合包,找到 better mc 五这篇文章, 往下滑到部署,准备点击下载按钮,进入 files 后点击 files 菜单,选择需要下载的游戏版本, 点击 download 开始下载,这是客户端文件,等待五秒后会自动开始下载。下载完成后回到刚才的页面, 找到 additional files, 这是服务端文件,按照相同方式下载,我们稍后会用它来部署服务器。如果遇到 cursor forge 加载慢或者打不开,也可以使用远光云技术云盘下载,注意云盘中的文件可能不是最新版,但和本期视频保持一致。 如果有网络条件,还是建议使用 cursor 官方网站进行下载。汉画包文件可以点击页面上的链接,来到作者的专栏,找到作者的下载链接进行下载,下载的时候注意要选择和整合包匹配的版本。 接下来我们安装客户端,把下载好的客户端文件拖入我的世界启动器内,就开始自动下载安装了。注意是客户端文件,不是服务端文件,不要拖错了。本视频演示的是 pcl 二启动器,其他启动器也是类似操作。下载完成后,接下来安装汉化资源, 点击版本设置版本文件夹,打开下载好的汉画包文件夹,将这几个文件复制粘贴替换到刚刚打开的版本文件夹内。 完成之后启动游戏客户端,进入游戏后,点击选项资源包,把带有汉画字样的材质包加入右侧起用区域, 点击完成,这样客户端就汉化完成了。如果你只想单人游戏,到这一步就可以了,如果想和小伙伴联机就继续往下看。我们需要购买一个云服务器,可以在浏览器里进行搜索, 也可以点击视频简介下方的链接进行跳转,点击立即前往 better mc 五整合包对性能要求较高,这里推荐元光云的五九五零 x 和十六 g, 其他默认即可, 如果同时在线人数多,建议按需增加内存,若发现任务管理器中贷款资源占用较高,也可以适当提升贷款。 up 主现在也给大家争取到福利了, 给大家准备了大量的八折券,可以直接访问视频下方的链接,来到这个页面后绑定 up 主为代理商,完成后私聊 up 主就可以把优惠券送给大家了。接下来我们打开源光云的控制台,点击端口映设, 如果选择的是 windows 系统,则点击三三八九远程端口,点击确认后再添加一个 minecraft 的 二五五六五端口,添加完成后,点击上方的 r d p 远程连接,下载 m s t s c 配置文件,账号默认是 administrator, 密码就是购买云服务器时设置的密码。 接下来我们部署服务端,把下载好的服务端压缩包和汉画包从自己电脑复制,再在远程桌面粘贴,就可以进行文件传输,传输完成后先解压一下服务端文件夹, 解压的时候可以先下载一个 java 环境,可以打开桌面上的远光云技术云盘,这个链接我也会放简介里的。跟着我的步骤打开存放 java 的 路径,我们需要安装 java 二十一, app 主是在自己电脑上安装的,就不演示安装流程了,一直默认下一步就可以了。 安装完成后,我们打开服务端文件夹,先编辑一下这个文件,我们修改一下内存设置,拉到最下面,找到 java rx 字段,将这里的四 g 修改成服务器最大内存减三 g, 根据自己的服务器内存进行设置,比如你服务器最大内存为十六 g, 那 么这里就设置成一三 g 就 可以了。修改完成后保存并退出。双击打开,启动脚本,稍微等待一会儿,这是让我们同意优拉协议,可以从上面复制一个 i a g 鼠标,右键进行粘贴,回车确认,耐心等待一会儿,等待的时间较长,需要补全服务端文件。跑马不动后,可以输入 list, 出现在线人数,就说明开服成功了。开服成功后,先关闭正在运行的服务端脚本,我们导入一下汉化资源,打开汉化包文件夹,将这个文件复制粘贴替换至服务端跟目录内。如果需要关闭正版验证,打开 server properties 这个文件, 找到 allenmod 字段,将出入改成 false, 修改完成后退出。最后重新打开服务端,启动脚本,耐心等待一下,等跑马不动后,输入 list, 出现在线人数,就说明开服成功了。开服成功后,回到远光云控制台,点击防火墙内网 ip 二五五六五端口对应的公网连接 ip 就是 给小伙伴的进服 ip。 那 本期视频到这里已经结束了,如果本期视频对你有帮助,记得一键三连关注 up 主,那么我们下期再见!

本期教程带你搭建东境边域整合包服务器,流程很简单,按照步骤操作即可完成。我们使用云服务器来部署,这样服务端在云端运行不会占用你的电脑性能还能二十四小时稳定在线,朋友们随时都能进服, 而且延迟最低也仅有个位数。那么话不多说,马上开始安装吧。首先下载东境边域的客户端和服务端资源,打开网页后,点击所有整合包,找到东境边域这篇文章, 往下滑到部署准备点击下载按钮,跳转到 curse forge 官网,进入 curse forge 后,点击 files 菜单,选择需要下载的游戏版本, 点击 download 开始下载。这是客户端文件,等待五秒后会自动开始下载。下载完成后回到刚才的页面,下拉找到 additional files, 这是服务端文件,按照相同方式下载,我们稍后会用它来部署服务器。 接下来我们安装客户端,把下载好的客户端文件拖入我的世界启动器内,就开始自动下载安装了。注意是客户端文件,不是服务端文件,不要拖错了。本视频演示的是 pcl 二启动器,其他启动器也是类似操作。 下载完成后就可以启动游戏客户端开始游玩了,如果你只想单人游戏,到这一步就可以了,如果想和小伙伴联机就继续往下看。我们需要购买一个云服务器,可以在浏览器里进行搜索, 也可以点击视频简介下方的链接进行跳转,点击立即前往。东靖边域整合包对性能要求较高, 这里推荐袁光云的五九五零 x 四和十二 g 或七九五零 x 四和十二 g, 其他默认即可。如果同时在线人数多,建议按需增加内存,若发现任务管理器中宽带资源占用较高,也可以适当提升宽带。阿部主现在也给大家争取到福利了, 给大家准备了大量的八折券,可以直接访问视频下方的链接,来到这个页面后,绑定 up 主为代理商,完成后私聊 up 主就可以把优惠券送给大家了。接下来我们打开元光云的控制台,点击端口映设, 如果选择的是 windows 系统,则点击三三八九远程端口,点击确认后再添加一个 minecraft 的 二五五六五端口添加完成。 m s t s c 配置文件 账号默认是 administrator, 密码就是购买云服务器时设置的密码。接下来我们部署服务端, 把下载好的服务端压缩包从自己电脑复制,再在远程桌面粘贴,就可以进行文件传输。传输完成后先解压一下服务端文件夹,解压的时候可以先下载一个 java 环境,可以跟着我的步骤打开安装 java 的 路径, 如果使用的是远光云服务器,可以直接通过桌面上的远光云技术云盘打开。我们需要安装 java 时期, up 主是在自己电脑上演示的, 并且已经下载好了 java, 就 不演示安装过程了,安装的时候一直下一步就可以了。安装完成后,我们打开服务端文件夹,双击打开这个文件,我们修改一下内存设置,把这里的四 g 修改成服务器最大内存减三 g, 根据自己的服务器内存进行设置,比如你服务器最大内存为十二 g, 那 么这里就设置成九 g 就 可以了。修改完成后保存并退出。双击打开启动脚本,耐心等待一会儿。第一次启动较慢, 需要补全服务端文件。跑马不动后,可以输入 list, 出现在线人数,则说明开服成功了。如果需要关闭正版验证,先关闭正在运行的服务端脚本,打开 server properties 这个文件,找到 online mode 的 字段,将 true 改成 false。 修改完成后保存并退出。最后重新打开服务端,启动脚本,耐心等待一下。等跑马不动后,输入 list, 出现在线人数,就说明开服成功了。开服成功后,回到远光云控制台,点击防火墙内网 ip 二五五六五端口对应的公网连接 ip 就是 给小伙伴的进服 ip。 那 本期视频到这里已经结束了,如果本期视频对你有帮助,记得一键三连关注 up 主,那么我们下期再见!