永红的互联网手记

我相信好代码和好产品改变世界!

0%

技术爱好者周刊,每周一发布,欢迎提issue贡献内容。

后端

  • 干货 | 携程 Cilium+BGP 云原生网络实践
    Cilium 是近两年最火的云原生网络方案之一。Cilium 的核心基于 eBPF,有两大亮点:基于 eBPF 的灵活、高性能网络,以及基于 eBPF 的 L3-L7 安全策略实现。携程 2019 年开始在生产环境使用 Cilium,本文将介绍 Cilium 在携程的落地情况,以及我们基于 Cilium 的、覆盖虚拟机、物理机和容器的云原生安全的一些探索。
  • 数据人的“大考”:AnalyticDB如何强力支撑双11?
    每年的双11都是云原生数据仓库AnalyticDB MySQL版(原分析型数据库MySQL版)的一块试金石。今年AnalyticDB除了在阿里数字经济体内进入更多核心交易链路,全力支撑双11以外,AnalyticDB全面拥抱云原生,构建极致弹性,大幅降低成本,释放技术红利,重磅发布了诸多全新企业级特性,让用户及时拥有极高性价比的云原生数据仓库。本文深度解析云原生数据仓库AnalyticDB面临的挑战和最新关键技术,分享双11护航背后的技术实践与经验。

前端

  • 双十一SSR优化实践:秒开率提升新高度
    会场是每年双十一的主角之一,会场的用户体验自然也是每年最关注的点。在日趋复杂的业务需求下,如何保障我们的用户体验不劣化甚至能更优化是永恒的命题。
    今年(2020)我们在不改变现有架构,不改变业务的前提下,在会场上使用了 SSR 技术,将秒开率提高到了新的高度(82.6%);也观察到在用户体验得到优化的同时,业务指标如 UV 点击率等也有小幅的增长(视不同业务场景有不同的提升,最大可达 5%),带来了不错的业务价值。
    本文将从服务端、前端两个角度介绍我们在 SSR 上的方案与经验
    1、前端在解决工程化、业务效果评估上的具体实践与方法论
    2、服务端在解决前端模块代码于服务端执行、隔离和性能优化上的具体实践与方法论
  • 爱奇艺知识移动端组件化探索和实践
    组件化对于任何一个业务场景复杂的APP以及经过多次迭代之后的产品来说都是必经之路,组件化是指解耦复杂系统时将多个功能模块拆分、重组的过程。组件化要做的不仅仅是表面上看到的模块拆分解耦,其背后还有很多工作来支撑组件化的进行,例如结合业务特性的模块拆分策略、模块间的交互方式和构建系统等等。本文主要讲述爱奇艺知识APP如何结合自身的业务特点,探索和实践了一套高效的移动端组件化方案。
阅读全文 »

技术爱好者周刊,每周一发布,欢迎提issue贡献内容。

后端

  • Java中9种常见的CMS GC问题分析与解决
    目前,互联网上 Java 的 GC 资料要么是主要讲解理论,要么就是针对单一场景的 GC 问题进行了剖析,对整个体系总结的资料少之又少。前车之鉴,后事之师,美团的几位工程师搜集了内部各种 GC 问题的分析文章,并结合个人的理解做了一些总结,希望能起到“抛砖引玉”的作用。
  • Java-Collectors常用的20个方法
  • TDengine + EMQ X + Grafana 轻松搭建高效低成本的边缘侧工业互联网平台
    本文将介绍基于TDengine、EMQ X搭建一个集工业数据采集、汇聚、清洗、存储分析以及可视化展示等能力于一体的轻量级边缘计算工业互联网平台。在此方案基础上,读者可以根据自身需求调整方案设计,从而搭建满足实际业务需求的工业互联网平台,加速实现工业智能化转型。
  • 微服务授权应该怎么做?
    前后端鉴权是一个很大的话题,不同组织的鉴权方式各不相同,甚至对同一协议的业务实现也可能相去甚远。本文尝试从认证与授权两个维度来描述标题中的鉴权,大部分篇幅还是偏认证。
  • 分布式系统!如何实现用户追踪和认证?
    讲使用 spring security 等具体技术的资料已经很多了,这篇文章不打算写框架和代码的具体实现。我们会讨论认证和授权的区别,然后会介绍一些被业界广泛采用的技术,最后会聊聊怎么为 API 构建选择合适的认证方式。
  • 一例 Go 编译器代码优化 bug 定位和修复解析
    本文中介绍了 Go 编译器的整体编译流程脉络和一个编译优化错误导致数据越界访问的 bug,并分析了对这个 bug 的排查和修复过程,希望能够借此让大家对 Go 编译器有更多的了解,在遇到类似问题时有排查思路。
  • 服务注册中心 | 记一次Consul故障分析与优化
    在微服务体系中,服务注册中心是最基础的组件,它的稳定性会直接影响整个服务体系的稳定性。本文主要介绍了爱奇艺微服务平台基于Consul的服务注册中心建设方式,与内部容器平台、API网关的集成情况,并重点记录了Consul遇到的一次故障,分析解决的过程,以及针对这次故障从架构上的优化调整措施。Consul 是近几年比较流行的服务发现工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案相比Consul 的方案更“一站式”,使用起来也较 为简单。他的主要应用场景为:服务发现、服务隔离、服务配置。
阅读全文 »

技术爱好者周刊,每周一发布,欢迎提issue贡献内容。

后端

  • 程序员都应该知道的URI,一文帮你全面了解
    URI 是每个程序员都应该了解的概念,同时相关联的还有 URL, URN 等概念簇。了解这些概念,可以帮助我们更好地窥探万维网(WWW)的设计,同时也能帮我们在工作中有效解决跟 URI 相关概念的问题,更加理解 encode,decode 工作原理,更好地助力网络编程!
  • 5G时代|淘宝直播高画质低延时技术探索
    5G将对视频分辨率和清晰度提出越来越高的要求。淘宝作为一个数亿级用户的短视频与直播平台,业务多样,两端用户分布广,设备和网络情况复杂,给多媒体内容存储和分发带来巨大挑战。在内容生产过程中把控好质量和成本,在内容分发和消费过程中确保用户体验,是当前面临的主要问题。为了解决这个问题,我们有两个优化目标,一是在画质不变的前提下降码率,二是在码率不变的前提下提升画面质量。
  • 干货 | 携程Elasticsearch数据同步实践
    Elasticsearch是最近几年非常热门的分布式搜索和数据分析引擎,携程内部不仅使用ES实现了大规模的日志平台,也广泛使用ES实现了各个业务场景的搜索、推荐等功能。本文聚焦在业务搜索的场景分享了我们在做数据同步方面的思考和实践,希望能对大家有所启发。
阅读全文 »

技术爱好者周刊,每周一发布,欢迎提issue贡献内容。

后端

  • 你不知道的JMM底层原理
    在多线程并发的世界里synchronized、volatile、JMM是我们绕不过去的技术坎,而重排序、可见性、内存屏障又有时候搞得你一脸懵逼。有道是知其然知其所以然,了解了底层的原理性问题,不论是日常写BUG还是面试都是必备神器了。

前端

  • Native地图与Web融合技术的应用与实践
    本文将WebView与Native地图组件叠加到一起,实现了用户手势事件智能分发的机制,解决了WebView与Native地图在同一页面内布局困难的问题。
  • 波塞冬:伴鱼运营活动前端配置化实践
    波塞冬,是伴鱼活动运营解决方案的总称,包含活动规则体系、h5 可视化开发平台等,名称来源于古希腊神话,波塞冬是海洋和所有水系的管理者,寓意为 palfish 发展提供超能力。
  • 干货 | 深入浅出Apple响应式框架Combine
    Combine.framework 是Apple在2019 WWDC 上基于Swift推出的函数响应框架(Functional Reactive Programming),支持Apple全平台的操作系统(iOS13+,macOS 10.15+等)。函数式响应框架无论在哪个平台早已流行泛滥,开源的Rx更是实现了各种语言的响应式编程框架。Apple在这个时候推出响应式框架,无疑是对自己护城河的进一步巩固。事实上SwiftUI的数据驱动就是依赖Combine。本文将深入浅出地介绍Combine的基本概念和原理,然后通过具体demo详细阐述其在实际编码中的应用。
    阅读全文 »

It’s time in which we are directed by the needs and desires of others, and denied the right to make our own choices. 这个时代,我们受他人的需求和欲望支配,反而剥夺了自己做出选择的权利。


  • Volunteers are teenagers and adults who choose to spend some time, unpaid, helping other people in some way. 志愿者是选择花费时间,不求酬劳以某种方式帮助他人的青少年或者是成年人。

  • Aim high but within reason. 要有雄心,但也要理性。

阅读全文 »

答非所问,其实已经是答了。木心


浮现在天空中的月亮尽管一样,但我们看到的也许是另一个东西。村上春树 《1Q84》

其实秋天不是秋天,秋天是夏天努力地想要停止下来的那段时光。简蔓

阅读全文 »

本文主要介绍了Java的8种数据类型和他们的封装类,封装类数值范围,封装类的缓存池。

基本数据类型

1
2
3
4
5
6
7
8
byte/8
char/16
short/16
int/32
float/32
long/64
double/64
boolean/~

boolean 只有两个值:true、false,可以使用 1 bit 来存储,但是具体大小没有明确规定。JVM 会在编译时期将 boolean 类型的数据转换为 int,使用 1 来表示 true,0 表示 false。JVM 支持 boolean 数组,但是是通过读写 byte 数组来实现的。

阅读全文 »

技术爱好者周刊,每周一发布,欢迎提issue贡献内容。

后端

  • 基本功 | Java即时编译器原理解析及实践
    跟其他常见的编程语言不同,Java将编译过程分成了两个部分,这就对性能带来了一定的影响。而即时(Just In Time, JIT)编译器能够提高Java程序的运行速度。本文会先解析一下即时编译器的原理,然后再分享一些在美团实践的经验,希望能对大家有所帮助或者启发。
阅读全文 »

MySQL核心应用开发规范总结起来有三点:表越窄越好,表越小越好,请求够高效,接下来详细解释一下这三点。

表越窄越好

设计表字段的时候,选择的数据类型够用就行。

  • 存储账号名(长度≤30)就没必要 varchar(255)
  • Unix时间戳,可以使用无符号整型(INT UNSIGNED)
  • IPv4地址,也可以使用无符号整型(INET_AOTN()和INET_NTOA()函数)

可以通过执行 show table status 来查看表的统计信息:

  • Avg_row_length 值超过100字节
  • Data_free 值大于0说明表存在碎片
阅读全文 »

分布式系统中进程如何通信

由传统的函数调用变成跨网络的进程间通信(RPC),通信中间件需要屏蔽复杂性,需要关注以下4点

  • 公司的多语言诉求(多种语言需要要避开语言绑定的RPC框架)
  • 性能方面 序列化协议
  • 业务长期演进中通信框架替换成本
  • 考虑通信框架背后的微服务组件生态是否完整(配置管理,服务发现,断路器,负载均衡)

RPC通讯框架的4个实践经验:

  • 公司作战需要规范(趁早规范化、标准化)
  • 具备服务异常保护机制(a.过载保护,节点,接口等,b.异常故障压制,弱化依赖,默认值,降级)
  • 健壮的集群间容错策略(a.流量容错,b.调用端对端服务节点状态感知)
  • 多样的调用方式支持多样的业务场景(异步,OneWay)
阅读全文 »