Many Links 0803

1.
继续 SCALA TIMES 上的分享
https://mailchi.mp/softwaremill/scala-times-issue-2607957
Akka anti-patterns: Java serialization
Practical Cats: Functor and Applicative
Implicits, type classes, and extension methods, part 4: understanding implicits
Cross-Platform Language Design
2.
Be Nice And Write Stable Code
http://technosophos.com/2018/07/04/be-nice-and-write-stable-code.html

Versions and SemVer
In software, we use version numbers to signal that something has changed. Version numbering schemes go from dead simple (integers that increment with every release, or date stamps) to surprisingly complex (1.0~pre3+dfsg-0.1+b2, 2.1.1+git20160721~8efc468-2, and 1.2.0+LibO5.2.7-1+deb9u4 are a few versions spotted in the wild).

But when it comes to software version numbers, the current leader in version numbering schemes is SemVer (or Semantic Versioning). Don’t be fooled, though! Many people claim to know how SemVer works, but have never read the specification. Since this is a critical piece of what we are about to talk about, here is a summary of the spec:

Version numbers take the form X.Y.Z, sometimes augmented with additional pre-release and build information: X.Y.Z-AAA#BBB. And each of those fields means something well defined and specific.

X is the major number. Changes in this indicate breaking changes to the API (and/or behavior).
Y is the minor number. Changes to this number indicate that new features were added, but that no APIs are broken as a result.
Z is the patch version. Changes to this indicate that internal changes were made, but that no changes (even compatible changes) were made to the API.
These three are the important ones for us. Again, I suggest taking 15 minutes to read the entire spec.

Countless projects use a format that looks like SemVer, but many of them ignore the semantics behind the version number. Often, it seems that version numbers are incremented by “gut feel” instead of any consistent semantic: “This feels like a minor version update.”


3.
lucene中的PackedInts源码解读-1
http://suichangkele.iteye.com/blog/2427364
4.
【译】 追踪同步分片副本
https://www.easyice.cn/archives/243
https://www.easyice.cn/archives/283
5.
Lucene 基础理论
http://www.blogjava.net/hoojo/archive/2012/09/06/387140.html
https://github.com/kakawait/cas-security-spring-boot-starter
6.
几个名词解释:
https://en.wikipedia.org/wiki/High-availability_cluster

Node configurations
Active/active — Traffic intended for the failed node is either passed onto an existing node or load balanced across the remaining nodes. This is usually only possible when the nodes use a homogeneous software configuration.
Active/passive — Provides a fully redundant instance of each node, which is only brought online when its associated primary node fails.[2] This configuration typically requires the most extra hardware.
N+1 — Provides a single extra node that is brought online to take over the role of the node that has failed. In the case of heterogeneous software configuration on each primary node, the extra node must be universally capable of assuming any of the roles of the primary nodes it is responsible for. This normally refers to clusters that have multiple services running simultaneously; in the single service case, this degenerates to active/passive.
N+M — In cases where a single cluster is managing many services, having only one dedicated failover node might not offer sufficient redundancy. In such cases, more than one (M) standby servers are included and available. The number of standby servers is a tradeoff between cost and reliability requirements.
N-to-1 — Allows the failover standby node to become the active one temporarily, until the original node can be restored or brought back online, at which point the services or instances must be failed-back to it in order to restore high availability.
N-to-N — A combination of active/active and N+M clusters, N to N clusters redistribute the services, instances or connections from the failed node among the remaining active nodes, thus eliminating (as with active/active) the need for a ‘standby’ node, but introducing a need for extra capacity on all active nodes.


双机热备特指基于高可用系统中的两台服务器的热备(或高可用),因两机高可用在国内使用较多,故得名双机热备,双机高可用按工作中的切换方式分为:主-备方式(Active-Standby方式)和双主机方式(Active-Active方式)
active-active
很好理解, 用两个完全一样的server, 然后用一个load balancer进行请求的调度.
active-passive
active-passive也是两个服务器节点, 但是绝大多数时间是active的那个(或者说primary)进行服务, 当primary服务器出问题, 就使用另一个passive服务器作为备用.
7.
Why I don’t use JSON ASTs
https://www.reddit.com/r/scala/comments/933s2s/why_i_dont_use_json_asts/
lihaoyi给出的答案,可参考

If you use uJson, you don’t need to choose:
1.Just need case classes? Read/write directly to case classes
2.Need an AST? Read/write directly to the AST
3.Specifically want some other AST that’s not the uJson AST? You can read/write directly to the circe/play-json/etc. ASTs too
4.Don’t need case classes or an AST, and just want to pretty-print JSON? Read/write directly String -> String
5.Don’t need any output at all, and just want to parse+validate your JSON? You can do that too.

ASTs are a thing you sometimes want, but they don’t need to be in the critical path if you want some other thing. If you want one, great, if you want something else, a visitor-based library like uJson can give you that something else directly and without fuss.


8.
https://www.wired.co.uk/article/human-faeces-poo-as-fertiliser
9.
ActivityPub
https://activitypub.rocks/
ActivityPub is a decentralized social networking protocol based on the ActivityStreams 2.0 data format. ActivityPub is an official W3C recommended standard published by the W3C Social Web Working Group. It provides a client to server API for creating, updating and deleting content, as well as a federated server to server API for delivering notifications and subscribing to content.
附:ActivityPub could be the future
10.
https://mp.weixin.qq.com/s?__biz=MzAwODY4OTk2Mg==&mid=2652046740&;idx=1&sn=2b01ecd64c516d59f38253f723bcebda
PageSpeed Insights (PSI) 是 Google 在全球范围内应用最广的开发者工具之一。PSI 2.0 版本在2018年1月9日发布并且取得了巨大的成功。为了更好地帮助中国地区的开发者并构建一个良好的网页生态环境,今天,我们很高兴地宣布 PSI 在developers.google.cn/speed/pagespeed/insights/ 上线啦!
11.
传闻阉割版Google要归来了
首个独家
https://theintercept.com/2018/08/01/google-china-search-engine-censorship/
https://www.theguardian.com/world/2018/aug/02/google-working-on-censored-search-engine-for-china
oschina的大约译文
https://www.oschina.net/news/98571/google-china-search-engine-censored-report
毫无意外的,相信google会在这位任期内归来,比我预估还是快了点
虽然国外面临同行/国会质疑,但是,还是觉得Pichai的回复感人:
12.
Kafka 2.0重磅发布,新特性独家解读
http://www.infoq.com/cn/news/2018/08/kafka2.0-new-features

增强在线可进化性
因此我们从很早以前开始注意保证在线升级的方便性,在这一次的 2.0.0 版本中,更多相关的属性被加了进来,比如 KIP-268、KIP-279、KIP-283 等等。
KIP-268:简化 Kafka Streams 升级过程
Kafka Streams 利用 Consumer Rebalance 协议里面的元数据字符串编码诸如任务分配、全局查询、版本升级相关的信息。然而,当编码版本本身改变的时候,就需要进行离线升级。比如之前从 0.10.0 版本向更高级的版本升级的时候,用户就需要将所有的 Streams 程序下线,换上新的 Kafka 版本号,然后在全部重启。
KIP-268 利用 version prob 可以使得旧版本的任务分配者告知其他高版本的成员暂时使用旧版本的 Rebalance 元数据编码,这样就可以让用户依然能够通过 rolling bounce 在线升级 Kafka Streams 的版本。而当所有参与的成员全部升级完毕之后,最后一次 rebalance 会自动切换回新版本的元数据编码。
KIP-279:修补多次 Kafka 分区主本迁移时的日志分歧问题
在升级 Kafka 版本或者做定期系统维护的时候,用户往往需要进行连续的多次 Kafka 分区迁移。在这次发布中我们修补了一个在此过程中可能会出现的一个会导致日志分歧发生的边缘情况。具体方案就是将此前版本中已经加入的主本 epoch 信息扩散到 OffsetForLeaderEpochResponse。如此所有主副本就可以清晰知道自己到底处于当前分区备份的哪一个阶段,从而杜绝因为消息不对等而可能导致的日志分歧。
KIP-283:降低信息格式向下转换时的内存消耗
在一个多客户端组群的环境下,客户端与服务器端的版本不匹配是常见现象。早在 0.10.0 版本中,Kafka 已经加入了允许不同版本客户端与服务器交互的功能,即高版本的 Kafka 客户端依然可以与低版本的服务器进行数据传导,反之亦然。然而当低版本的消费者客户端和高版本的服务器进行交互时,服务器有时需要将数据向下转换(format down-conversion)成为低版本客户端可以认知的格式后才能发回给消费者。向下转换有两个缺点:
丢失了 Kafka 数据零拷贝(zero-copy)的性能优势;
向下转换需要额外的大量内存,在极端情况下甚至会导致内存溢出。
前者无法避免,但是后者依然可以改进:在即将发布的 2.0 版本中,我们使用了一种新的基于分块(chunking)的向下转换算法,使得需要同时占据的内存需求大幅缩减。这使得高低版本的客户端与服务器之间的交互变得更加有效。
在 2.0.0 版本中,我们进一步加强了 Kafka 的可监控性,包括添加了很多系统静态属性以及动态健康指标,比如 KIP-223、KIP-237、KIP-272 等等。
KIP-223:加入消费者客户端的领先指标
KIP-237:加入更多 Kafka 控制器的健康指标
更全面的数据安全支持
在 2.0.0 版本里面,我们对此提供了一系列的改进,比如更细粒度的更细粒度的前缀通配符访问控制(KIP-290、KIP-227),支持 SASL/OAUTHBEARER(KIP-255),将委托令牌扩展到管理客户端(KIP-249),等等。
KIP-290、KIP-227:细粒度前缀通配符访问控制
更多见: https://www.apache.org/dist/kafka/2.0.0/RELEASE_NOTES.html


13.
Service Mesh是什么?至今到位的总结
http://blog.brucefeng.info/post/what-is-service-mesh

Service Mesh能做什么
服务发现
动态路由
负载均衡
请求熔断
安全通讯
多语言支持
多协议支持
Metric和链路追踪
重试
2 为什么有微服务了还要Service Mesh
但微服务存在以下问题:
多语言支持
微服务在开始之初就承诺了一个重要的特性,就是不同的微服务可以采用不同的变成语言实现,服务与服务之间通过协议通信。
但要实现多语言支持面临很多困难,所以现在大部分公司都是通过统一编程语言来实现。即使部分实现了多语言的微服务,需要美中语言都实现相同的功能服务框架,导致微服务SDK很重,需要实现服务注册发现,服务路由、负载均衡、服务鉴权、服务降级、服务限流等,成本极高。
对业务代码侵入
业务项目实现微服务需要引入微服务SDK,并进行少量的开发,这些开发是和业务项目耦合的。
这种侵入,导致微服务SDK在升级过程中极其痛苦,甚至为因为SDK而导致线上事故,由此带来的升级维护成本较大
在我所在的公司,每次进行SDK升级时,都需要公司强制执行,升级过程中又会牵涉到与其他开源组件不兼容的情况,上线后也需要花时间灰度观察。整个公司这样做,其成本可想而知。
学习成本高
服务注册发现,服务路由、负载均衡、服务鉴权、服务降级、服务限流 这些功能几乎都可以独立成一个项目,实际上很多开源项目也是这样做的。每个组件的学习及熟悉成本都会很大,而业务开发首要面对的问题是业务支持,而不是花较大的精力在基础组件的学习使用上。


14.
https://www.theatlantic.com/science/archive/2018/08/nasa-culture-optimism-james-webb/566558/?utm_source=feed
近年似乎遭受了不少的质疑,作者从NASA最近推迟了自己的一项计划探讨NASA正在经历的一种过于乐观的文化氛围。
以下搜狗翻译:

然而,将美国人送上月球的乐观心态并没有改变。2012年的报告称:“当被问及定义‘项目成功’时,我们采访的几乎所有项目经理都回答说,如果一个项目达到了技术性能目标,它就是成功的。”。“没有一个经理提到控制成本和进度增长是衡量成功的重要标准。此外,所有人都说他们的项目是成功的,尽管许多人经历了不利的成本和进度结果。”
马丁说NASA的员工称这种认知失调为“哈勃心理学”。“哈勃太空望远镜在1990年到达太空时并没有立即获得成功。这台望远镜研制的时间比承诺的要长得多,超出了预算,发射时主镜出现了一个缺陷,需要多次维修和保养。但是今天,哈勃被认为是国家财富,它混乱的开端已经被人们遗忘。
马丁说:“只要你带回——就哈勃望远镜而言——漂亮的照片,你所有的成本超支和日程延误都会被原谅。”。“因为重要的是科学到底是什么,而不是你是如何到达那里的,你是多么的混乱、预算过多还是日程安排过度。这可能有点夸张,但这是一种心态:如果你带回漂亮的照片,所有的罪过都会被原谅。”
这是韦伯团队似乎寄希望于的结果。项目官员一遍又一遍地说,韦伯值得等待,因为成本已经上升,终点线已经越来越远。他们希望这种回报会掩盖这个过程的痛苦。
研究表明,大多数人都是乐观主义者。在工作环境中,乐观可能是一种激励力量。《消极思维的积极力量》一书的作者、韦尔斯利学院心理学教授朱莉·诺尔姆说:“人们喜欢乐观而不是悲观。”该书认为,对一些人来说,乐观是一种无效的策略。“他们很有信心认为一切都会成功,因此这可以激发他们的积极性。这可能会导致人们尝试一些他们可能不会尝试的东西,因为他们非常积极,肯定会成功。”
在团体中,特别是那些致力于共同目标的团体中,乐观的思维可能具有传染性。伦敦大学学院研究人脑乐观倾向的神经科学家塔利·沙洛特说:“如果你让一群人参与一个项目,每个人都有一点偏见——人们的偏见相当温和,只是高估了积极的一点,低估了消极的一点——你把他们放在一起,偏见就会变得更大。”。


15.
http://www.sciencemag.org/news/2018/07/beyond-silicon-15-billion-us-program-aims-spur-new-types-computer-chips

Silicon computer chips have been on a roll for half a century, getting ever more powerful. But the pace of innovation is slowing.
Today the U.S. military’s Defense Advanced Research Projects Agency(DARPA) announced dozens of new grants totaling \$75 million in a program that aims to reinvigorate the chip industry with basic research into new designs and materials, such as carbon nanotubes.
Over the next few years, the DARPA program, which supports both academic and industry scientists, will grow to $300 million per year up to a total of $1.5 billion over 5 years.


16.
http://www.discoverdev.io/archive/2018-08-01.html
http://www.discoverdev.io/archive/2018-08-02.html
http://www.discoverdev.io/archive/2018-08-03.html