保存成功
订阅成功
保存失败,请重试
提交成功
松

fun88手机版高级架构师
作者系fun88手机版技术专家,先后就职过阿里,网易,挖财等公司,有着近十年的服务器后端和fun88手机版领域的开发经验,对高并发和fun88手机版技术体系有广泛的使用经验和深刻理解。微信公众号:码上观世界...更多
创作文章13

Flink 最佳入门指南

Flink 在fun88手机版领域的发展可谓是如火如荼,达到人人开发人比称 Flink 的地步,然而一门新技术的发展往往是在若干底层技术或其他同级技术的基础上成熟发展起来的,Flink 也是结合 Storm 和 Spark 的理念,同样应用于 Hadoop 为代表的生态技术体系中。由于 Flink 的蓬勃发展,很多文档更新跟不上技术更新的步伐,再由于 Flink 打通了不同层面的 API,让 SQL 和 API 可以互相调用,这导致的问题就是看似条条大道通罗马,实际上很多路径是不通的,甚至很多官方文档的示例代码都难以跑通,导致新人在学习过程中很容易掉坑,学习信心备受打击。如果没有一定功底,很难知道问题的解决途径,比如最简单的最新版本在 Windows 上无法启动的,这是 bug,官方貌似还没有修复,本文结合作者的学习过程和经验,整理一些核心概念和原理,并结合实战案例深入领会 Flink 的设计和原理,最后列举 10 来个入门路上很容易碰到的问题和解决办法,以飨读者。 主要内容包括: 1. Flink 流批的不同和使用案例; 2. Flink 在 Windows 和 Linux 的部署方式; 3. 结合文件系统和数据库在数仓数据汇总方面的常见场景体验 Flink 三种不同 StreamTableSink 的不同,并从原理上进行阐述; 4. 常见问题总结和处理方式。 本文开发语言为 Python 和 Java,本课程适用于所有学习阶段的学员
Flink
98 订阅

基于对象导航图语言(OGNL)的动态 SQL 生成实现原理

在可视化图表应用中,通常的做法是一个图表对应一个数据源表(可以是关系型数据库或者是数据仓库表),然后通过配置指定查询表的维度和度量,动态渲染数据表,然而这种基于配置维度和度量的方式不太适合频繁更改查询条件的交互式查询,另外对于复杂的查询,如一个图表往往对应后端几个数据源表的自定义关联查询,而且筛选条件也可以根据输入条件动态变化,更复杂的情况是由于某些原因,底层数据源表加工不规范,导致多个图表使用同一份数据源时候,需要做较多的再加工处理,针对这些特意需求,如何设计后端功能才能一劳永逸地满足呢?这个时候非动态模板查询难以胜任。 使用过 MyBatis 的同学已经体验过其强大之处,但是在我们的场景,还不能直接使用这么复杂的框架,能否借鉴其思想,将其部分功能迁移过来呢?理论上和实际上其实都是可能的,但是需要解决以下几个问题: 1. 如何替换动态查询模板中的变量,简单的正则表达式虽然可以,但是毕竟效率不高,也无法进行表达式运算; 2. 如何计算查询模板中的变量或者表达式?这里的计算不仅包括算术、逻辑运算,还包括对象属性和方法调用等; 3. 如何优雅设计后端逻辑能够支持查询模板,比如 MyBatis 中将查询模板按照标签规范成 Text 节点,If逻辑节点,动态 Where 节点等; 4. 如何从模板中解析动态标签,生成上述不同的节点,包括从 XML 配置文件中生成? 通过本文的介绍和实操演示,带领大家了解上述问题的实现方式和原理,相信一定会收益匪浅,同时对熟悉 MyBatis 的工作原理也有重大帮助。 本文适合于任何成长阶段的 IT 从业者。
SQL
88 订阅

一种高效定时调度算法原理与实现

在实际应用中,经常会碰到定时的需求场景,大概分为以下几类: 1. 一次性的定时需求,比如未来某一时刻执行某操作,如 2020 年 11 月 11 日 0 点发送双十一活动预约结果通知; 2. 延时一段时间执行某操作,如下单 30 分钟未付款则关闭订单等; 3. 周期性的定时需求,比如客户端与服务器之间的活跃状态检查,每 30 秒没有“心跳”则认为链接失效;每天早上 9 点定时发送邮件通知; 4. 自定义时间表达式,比如 Crontab,这样的例子如每月 1 号,每周 5 执行,或者每月第 1 周的周 5 执行某操作。 本文从简单的定时开始,讲解一般定时程序包含的常用操作以及处理这些操作会涉及到的问题,比如并发修改、时间复杂度等。然后基于这些问题 如何优化,比如通常基于时间优先级排序的算法复杂度可以从 o(n~2) 优化到 o(logn),但是对于高并发的定时任务,动辄数量 10 万、百万、乃至千万,这个时间精度仍会大大受影响,有没有时间精度更高,调度效率更好的算法呢?最后本文给出一种 o(1) 的调度算法原理和实现,为了便于理解,本文会由浅入深给出完整的程序实现。另外,对于复杂的定时,比如自定义 Crontab,应用这种算法也能够轻松应付。 通过本文的学习,详细大家一定能够受益匪浅。本文适合于 IT 从业所有阶段的读者。
算法
110 订阅

深入理解 JVM Metaspace

Metaspace 是 JDK 1.8 之后引入用于替代之前的持久代区,对此本文对其做个全面深入介绍,内容包括: 1. Metaspace 是什么?因何而来? 2. 分配 Metaspace 和释放 Metaspace 的时机; 3. Metaspace 体系结构; 4. 匿名类的元空间释放; 5. 对象内存布局和压缩指针; 6. 元空间的配置 本文适合对 JVM 有一定基础或者概念的同学,比如了解 JVM 的堆、方法区以及了解Java 对象在内存的布局等。
JVM
109 订阅

关于 TCP 三次握手和四次挥手,你需要掌握的知识点

TCP 并非距离我们很远,相反有过服务端开发经历的同学都知道掌握 TCP 的基础知识的重要性,比如知道 TCP 三次握手和四次挥手,但是知道为什么要这样吗?服务器出现大量 close\_wait 和 time_wait,这是正常现象吗?怎么避免呢? 本文就这些常见问题梳理成文: 1. TCP 连接和关闭的状态流转和过程; 2. 常见问题原因分析和解决 本文适合于网络初学者和想进一步温习提升的同学。
TCP
150 订阅

限流原理和实现

限流在微服务中几乎是不可或缺的功能之一,不论是 Guava 还是 Spring Cloud 都提供了相应的二方包或者服务组件,并且常见的限流方案模型也比比揭示,但是您真的理解吗? 通过本文你可以了解到: 1. 基本的限流模型:滑动窗口、漏斗和令牌的基本原理和现存问题; 2. 了解以上模型相应的核心功能实现; 3. 分布式环境下如何进行分布式限流。 相信通过核心原理的实现,不仅减少阅读开源方案的无所适从,而且能更快抓住要领。 本文适合于不满足于如何使用限流方案的初学者,或者对限流方案一知半解但不知道如何下手实现的人员。
微服务
229 订阅

应用 Flask 开发在线证书颁发系统

在线证书颁发系统指的是根据用户提交的输入信息,自动生成证书,如荣誉证书等。通常涉及到图像处理。一个完整的在线颁发证书系统涉及到网页前后端的服务系统、证书颁发模块、数据存储模块等。本文通过一个实际的需求:武汉新冠援助人信息证书颁发系统。通过导入捐款人名单信息,自动生成捐助证书,可以在线搜索和查询、浏览证书。为了系统的简洁性,数据存储在 Sqlite。通过该例,读者可以了解到: 1. Flask 快捷开发网站的基本用法; 2. Flask 跟 Bootstrap、jQuery 的结合,实现前后端分离的做法; 3. 证书颁发的实现方法; 4. Sqlite 基本用法 本文适合于对以上感兴趣的任何用户。
Flask
100 订阅

Neo4j 在 Airflow 中的应用

Airflow 是非常流行的基于用户自定义开发创建任务的调度系统,然而不足之处是缺少任务之间依赖关系的元数据,导致日常优化和问题排查困难重重,尤其是当涉及到跨 DAG 依赖的情况下,这个问题更加显著。在数仓建设实践中,如何处理任务(表)的血缘关系是必不可少的内容,目前 Airflow 是无法满足的,本文提出一种基于 Neo4j 的方案,解析 Airflow 程序自动生成任务依赖关系和 DAG 依赖关系,转换成图的格式存储在 Neo4j,然后通过可视化的方式展示血缘关系。实践验证,该方案效果显著。 本文详细介绍: 1. Airflow 如何解析程序,生成任务和 DAG 的依赖关系; 2. 依赖关系在 Neo4j 的存储设计; 3. Neo4j 查询常用方法在血缘关系的使用;
Neo4j
108 订阅

如何基于 Django 快速搭建自己的网站

Django 是一个 Python 语言实现的、MVC 架构模式的开源 Web 框架。Django 以其优雅和简约使 Web 应用开发变得极其容易。本文通过示例演示如何快速搭建自己的站点,内容涉及到环境部署、项目目录结构、URL映射以及页面模板编写等。在此基础上对于展示如何实现网站高级功能比如搜索,内容涉及到搜索分词、索引建立、更新和搜索词的高亮展示等。 本文还基于 Django开发了一个动态网站框架,包含网站前端和后台两部分。前端负责展示,后端负责网站架构设计和内容发布等功能,导航条和分级类目基于网站管理后台动态添加。 作为示例:读者可以参看[该站点](https://www.zcd.xn--55qx5d/),这是本人为友人搭建的一个网站,虽然页面内容样式还有较大改进空间,但是足以感受到Django部署网站的便捷和高效。 本文适合想学习 Django 的朋友,以及想快速基于本站点构建自己网站的朋友。本文内容包含Django的整个部署过程和网站源代码。
Django
161 订阅

Antlr 快速入门指南

Antlr(ANother Tool for Language Recognition)是一个功能强大的解析程序,它基于编译原理理论将用户编写的语法规则经过词法分析和语法分析后形成一颗语法树,然后在此基础上提供深度优先遍历算法,按照监听器模式或者访问者模式对访问到的每个节点执行回调方法,这样用户只需要编写自己处理节点的业务逻辑,而不需要关心语法如何识别和如何遍历,大大简化了开发语言程序的难度。 我们知道的大名鼎鼎的fun88手机版处理框架 Hive、Spark、Presto 都是基于 Antlr 解析 SQL 语法规则,然后在语法树的基础上生成自己的执行计划。除了这些用途外,Antlr 还可以用于语言翻译等、规则处理等各种领域。 本文通过编译原理基础为开始,通过示例程序详细介绍如何基于 Antlr 开发应用程序,在文章中涉及到: 1. Antlr 的开发环境、调试工具的配置和使用(包括 Antlr 的原生工具用法和 IDEA 中使用插件调试); 2. Antlr 的基本语法规则使用; 3. Antlr 的监听器和访问器 的使用示例。 然后在访问器的基础上实现一个表达式计算程序,相信通过本文的介绍,能够让读者快速入门 Antlr,为阅读 Hive、Spark 源码打下基础。 本文适合于对 Antlr 感兴趣,以及想通过 Antlr 开发语言处理的任何人。文末附带推荐的权威中文翻译教材。
编程语言
122 订阅

Datax 源码解析和性能优化

Datax 是阿里开源的用于异构数据源之间的同步工具,如 MySQL 到 HDFS,MongoDB 到 ElasticSearch 等等,反之亦然。由于其良好的设计,同步效率极高,在互联网公司fun88手机版部门得到广泛使用。 然而在实际使用中,仍然有许多调优的地方,如果不懂其工作原理,就很难真正发挥其威力,本文凭借自己在跨大洋(杭州到美国西部)全量数据同步取得的成功经验,试图通过源码解析的方式 还原其设计原理,让大家能更好的驾驭 Datax。 通过本文,您将有如下几点收获: 1. Datax 工作流程 2. Datax 插件机制 3. Datax 同步实现 本文适合对 Datax 有一定使用基础或者想更进一步理解其实现原理的人员。
149 订阅

Airflow 源码解析和性能优化

Airflow 是 Airbnb 开源的,基于分布式任务队列 Celery 基础上的定时调度系统,它将不同的任务类型抽象成 operator,并提供 API 编排各任务之间的依赖关系和配置属性,形成 DAG,从而简化任务提交和维护成本。 同时 Airflow 还提供任务重跑,标记成功,查看日志等的可视化操作 UI 和更为灵活丰富的客户端命令行接口。另外可配置和可扩展的架构设计不仅支持单机单进程还支持基于 Celery 和 Mesos 的分布式集群运行,任务的消息通知也可以在 Redis 和 RabbitMQ 等中自由选择,使得 Airflow 可以灵活扩展。 实现一个分布式调度系统本身不难,难的是如何提供友好的交互,包括灵活的任务组织、提交、更新、日常任务维护等。更为重要的是调度引擎和执行引擎的稳定性,在这方面 Airflow 提供的方案很值得借鉴和学习。同时 Airflow 基于 Python 编写,为开发效率和快速验证思路带来了较大优势,在实际使用过程中,如何基于默认配置去调优都少不了对其调度流程和原理的掌握,本篇文章就为有志于从源码级别去了解其工作流程和优化的朋友准备的。 通过本篇文章,您可以了解到: 1. DAG 的加载、解析以及任务实例的生成方式 2. Airflow 如何定时调度,提交任务到 Celery 或者 Mesos 集群 3. Airflow worker 是如何执行派发下来的任务
调度
156 订阅

如何使用微信小程序开发打车应用

一个小程序通常包含前端和后端,前端主要涉及内容可视化展示,后端主要涉及数据的存储和查询。为了快速开发模型,后端可以使用微信提供的后端云数据库。对于打车应用,又分为司机端和乘客端。司机端包含的功能包括:认证(上传证件)、查看附近的订单、接单、会话、订单详情和历史接单记录等。乘客端的功能包括查看附近的司机列表,发布乘车请求、邀请接单、会话、历史订单列表等。这些功能都包含在本次发布的内容中,(附源代码)。 通过本文,你可以了解到: 1. 如何开发一款自己的微信小程序 2. 如何使用小程序常见的定位服务、地图服务、存储服务等 3. 如何使用小程序常见的 tab 组件、地图组件、按钮组件和事件处理、导航组件以及一个自定义的会话对话功能等 本文适合于对小程序感兴趣的开发者和想开发自己的应用小程序的读者,通过本文读者可以了解这些功能是如何通过小程序实现的,还可以基于该小程序开发自己的小程序,本小程序会让你少走很多弯路。
微信小程序
138 订阅