The Mirages

樱桃沟夹事

贵司又接着疫情来坑员工了。关键还坑普通员工。

X,Y.Z三月工资就发XX%,然后说是年底补齐。然后呢,销售的提成不缓发。可销售不是本来就是靠提成的,等于销售工资不受影响。

疫情来了,贵司业务蹭蹭蹭的涨,只是销售要不回来钱啊,这不是摆明了销售不力啊,居然还能这样包庇,真是服了。

这次疫情的到来按「企业微信」的说法属于天降赛道,可贵司这个时候不是说抓紧让销售要回来钱赶紧扩充队伍,还居然主动坑自己人。

虽然大家不至于做出微盟那种事情,但是这种只坑研发的行为实在是让人不齿,最终坑的就是自己了。

看微盟孙涛勇回应的,睡就睡了,敢做还不不敢承认,瞎说人欠网络贷,欠网络贷的不是应该卖了微盟的数据库,或者嵌入自己的广告代码进行盈利啊。删库也能盈利?这是竞争对手的套路?

阅读全文 »

对于英语音标这个东西,一直没有好好学习过。

正如一个B站网友说的:

小学老师:考试不考。
初中老师:高中才学。
高中老师:小学没学?

我记得是我们初中英语老师教过一节课,可那节课我是上了吗? 压根没印象了。

下面这个是音标课程的在线地址,很好啊。花了4天时间都看完了,其实很多人可能几个小时就完了。
https://www.bilibili.com/video/av5123229

下面就是一些笔记了。这里面元音部分基本都学的很清楚了,辅音在联想法里那几个有点苦难,还得多复习几遍。

阅读全文 »

如果说在线教育作为一个产业来说。那应该还可以。当然最终胜出的估计也是现在的几个巨头。

当然这个行业门槛不高,如果只是针对某个区域市场,那没几个人应该就可以开搞了。搞定当地教委就可以推广了。后面做大就另说了。

至少从这次疫情爆发来看,大部分这些都没有技术能力,能应对的都相当的少,但是前面说了就针对某个地区的可能还好,技术压力不大,而且活的还不错,但是要全面铺开就别想了。

我说的是针对个人的。

在线教育就是个伪命题。

首先,对于大部分自觉性真的一般,我也一般,网上一堆现有的教学网站你都未必学的过来。
当年有
http://study.163.com
https://www.coursera.org/

阅读全文 »

上一次写nginx cache应该还是10年前了,那时候好像是nginx 0.7.4开始的。
当时记得用的是tmpfs做的缓存目录,主要那时候公司钱多。96G的机器随便堆。

这次又要缓存后面rest服务器的静态资源。用的ssd,可观察了下iowait还是会到50%左右经常。看了下主要是写导致的。

下面这个是这次的配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
proxy_temp_path /cache/nginx/proxy_temp;
proxy_cache_path /cache/nginx/cx_cache levels=1:2 keys_zone=cx_cache:200m inactive=1d max_size=100g;

proxy_cache cx_cache;
proxy_cache_revalidate on;
proxy_cache_key "$request_uri $http_thumbnail";
proxy_cache_methods HEAD GET;
proxy_cache_valid 200 301 302 304 1d;
proxy_cache_min_uses 1;
add_header Cache-Concrol public;
expires 1d;
add_header Nginx-Cache "$upstream_cache_status";
proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;

proxy_ignore_headers 这个是一定要加的,这次发现要是后端返回内容里带了cookie信息就居然无法缓存了。

下面这个是官方的解释,这个我记得原先最老的版本是没有,看来确实要与时俱进啊。

阅读全文 »

武汉这次冠状病毒的疫情的死亡人数已经超过了当年SARS的死亡人数了。

感动很多,愤怒也很多。感动的都是平凡人的故事,愤怒的确实整个国家机器。比如红十字会,慈善总会这些。不知道为什么郭美美事件过去那么多年,居然一点都没有改变。

感动的平凡人在襄阳城「空巷里的一束光」唱的「你的答案」这样平凡的行为。

SARS的时候还只是一个学生,同时还在上海,没有特别的影响,记得就是学校提前放假了,后面又给补回来了。

记得整个上海应该就只有2个还是4个人得的。而这次的人数北京和上海都已经超过300人了。

现在还在武汉的人,我理解都是老实人啊,要不然在宣布封城的那8个小时应该加紧跑了出来,比如像LJ她的公公婆婆应该赶紧跑北京来的,可留在武汉,前两天还都没有住上院,就是每天去医院取药,回家自己吃,属于自生自灭的阶段。

阅读全文 »

由于现有的日志量越来越多了,原先一直用的gzip进行压缩的,默认的级别,可最近看着是越来越不行,是有必要进行新的选择。

选择的方向是就是zstd

在CentOS中直接

1
sudo yum install zstd -y

就可以安装完成

由于是日志文件,我们单个分割是57MB的大文件

阅读全文 »

线上有一个topic碰到突增,但是限制于topic的分区太少,消费实在太慢,导致影响到用户的感受。

首先我们看下这个topic

1
2
3
4
5
6
7
8
9
10
11
12
./bin/kafka-topics.sh --zookeeper prod-zk1:2181 --describe --topic Events

Topic: Events Partition: 0 Leader: 2 Replicas: 2,0 Isr: 2,0
Topic: Events Partition: 1 Leader: 2 Replicas: 0,1,2 Isr: 2,0
Topic: Events Partition: 2 Leader: 2 Replicas: 1,2,0 Isr: 2,0
Topic: Events Partition: 3 Leader: 2 Replicas: 2,1,0 Isr: 2,0
Topic: Events Partition: 4 Leader: 2 Replicas: 0,2,1 Isr: 2,1
Topic: Events Partition: 5 Leader: 0 Replicas: 1,0 Isr: 1,0
Topic: Events Partition: 6 Leader: 2 Replicas: 2,0 Isr: 2,0
Topic: Events Partition: 7 Leader: 2 Replicas: 0,1,2 Isr: 2,1
Topic: Events Partition: 8 Leader: 0 Replicas: 1,2,0 Isr: 1,0
Topic: Events Partition: 9 Leader: 1 Replicas: 2,1,0 Isr: 1,0

我们看到这个topic就10个分区,但是副本数却有些是2,有些是1。这种是否可以直接增加分区呢,答案是不行的。

你要这个时候增加分区就会报

1
requirement failed: All partitions should have the same number of replicas.
阅读全文 »

最近碰到一个kafka流量引发的故障。期初的现象是我们有些consumer超时。于是去看了下kafka broker的日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[2020-XX-XX YY:35:51,703] WARN [ReplicaFetcherThread-0-0], Error in fetch kafka.server.ReplicaFetcherThread$FetchRequest@712892d4 (kafka.server.ReplicaFetcherThread)
java.io.IOException: Connection to 0 was disconnected before the response was read
at kafka.utils.NetworkClientBlockingOps$$anonfun$blockingSendAndReceive$extension$1$$anonfun$apply$1.apply(NetworkClientBlockingOps.scala:87)
at kafka.utils.NetworkClientBlockingOps$$anonfun$blockingSendAndReceive$extension$1$$anonfun$apply$1.apply(NetworkClientBlockingOps.scala:84)
at scala.Option.foreach(Option.scala:257)
at kafka.utils.NetworkClientBlockingOps$$anonfun$blockingSendAndReceive$extension$1.apply(NetworkClientBlockingOps.scala:84)
at kafka.utils.NetworkClientBlockingOps$$anonfun$blockingSendAndReceive$extension$1.apply(NetworkClientBlockingOps.scala:80)
at kafka.utils.NetworkClientBlockingOps$.recursivePoll$2(NetworkClientBlockingOps.scala:137)
at kafka.utils.NetworkClientBlockingOps$.kafka$utils$NetworkClientBlockingOps$$pollContinuously$extension(NetworkClientBlockingOps.scala:143)
at kafka.utils.NetworkClientBlockingOps$.blockingSendAndReceive$extension(NetworkClientBlockingOps.scala:80)
at kafka.server.ReplicaFetcherThread.sendRequest(ReplicaFetcherThread.scala:244)
at kafka.server.ReplicaFetcherThread.fetch(ReplicaFetcherThread.scala:229)
at kafka.server.ReplicaFetcherThread.fetch(ReplicaFetcherThread.scala:42)
at kafka.server.AbstractFetcherThread.processFetchRequest(AbstractFetcherThread.scala:107)
at kafka.server.AbstractFetcherThread.doWork(AbstractFetcherThread.scala:98)
at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:63)

这里写着id为0的broker连接超时啊。那就重启id 0的broker了。可重启了之后发现如下日志了

1
2
3
4
5
6
[2020-XX-YY 14:13:27,728] INFO Partition [Event,196] on broker 1: Shrinking ISR for partition [Event,196] from 1,2 to 1 (kafka.cluster.Partition)
[2020-XX-YY 14:13:43,752] INFO Partition [Event,196] on broker 1: Expanding ISR for partition [Event,196] from 1 to 1,2 (kafka.cluster.Partition)
[2020-XX-YY 14:13:57,729] INFO Partition [Event,196] on broker 1: Shrinking ISR for partition [Event,196] from 1,2 to 1 (kafka.cluster.Partition)
[2020-XX-YY 14:14:16,304] INFO Partition [Event,196] on broker 1: Expanding ISR for partition [Event,196] from 1 to 1,2 (kafka.cluster.Partition)
[2020-XX-YY 14:14:37,510] INFO Partition [Event,196] on broker 1: Shrinking ISR for partition [Event,196] from 1,2 to 1 (kafka.cluster.Partition)
[2020-XX-YY 14:14:48,230] INFO Partition [Event,196] on broker 1: Expanding ISR for partition [Event,196] from 1 to 1,2 (kafka.cluster.Partition)

这里你看这一会儿Shrinking,一会儿Expanding。而且间隔时间相当的短,现在想来是很快的连接超时了。

这时候明显大家就慌了,远程办公就这点不好啊.

阅读全文 »

上篇有提到firewalld和iptables的区别。那就比较好奇firewalld的其他状态。

首先测试了22端口,这个端口在firewalld里是开放的,但是实际上机器上没有监听这个端口。这里我们看到,实际服务器返回的也是一个TCP-RESET。

然后又测试了一个被firewalld屏蔽的端口,实际服务器上也没有监听这个端口。这里我们可以看到返回的是ICMP的destination unreachable。

接着我们测试了一个被firewalld屏蔽的端口,实际服务器上监听了这个端口。这里我们可以看到返回的也是ICMP的destination unreachable。

最后我们直接屏蔽某个端口,发现也一样是返回ICMP的destination unreachable。

1
2
3
<rule family="ipv4">
<port protocol="tcp" port="10050"/>
<reject/>
阅读全文 »

在iptables中,我们一般封闭端口都是使用DROP参数,这样client端是不知道服务器已经DROP掉对应请求了,会继续进行等待,直到超时。

而像nc这种软件会根据这个其实是可以检测到服务器是否开启了这些端口。

但是我发现使用firewalld封闭后,用nc测试直接显示refused的

1
2
3
$ nc 202.96.209.5 29327 -v
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: No route to host.

而用iptables的话必须得是

1
# iptables -A INPUT -p tcp -m tcp --dport 29327 -j REJECT --reject-with tcp-reset
阅读全文 »
0%