用户您好!请先登录!

博客

缠中说禅交易指南

这里对缠中说缠博客原文和评论中的一些交易相关的非技术分析内容进行整理。这一部分内容通常会被大多数人认为是无意义的,至少比不上缠中说禅技术分析理论的价值,但这种理解是本末倒置的。没有对市场的深刻认识,没有对自己的深入剖析,不对自己的思维方式进行革命,花再多时间学习缠中说禅技术分析理论恐怕都是徒劳。

1. 认识市场,看清自己

人,总是很奇怪的,就算是很聪明的人,或者在其他行业很成功的人,一旦进入资本市场,就像换了人。虚拟和现实的鸿沟使得干实业的,且不说期货了,就算到风险小多的股市,也很少能干好的。而习惯在虚拟市场玩游戏的,基本很难回头去弄实业,这些例子都太多了。

阅读更多

美团智能客服核心技术简介

客服是在用户服务体验不完美的情况下,尽可能帮助体验顺畅进行下去的一种解决办法,是问题发生后的一种兜底方案。而智能客服能让大部分简单的问题得以快速自助解决,让复杂问题有机会被人工高效解决。在用户服务的全旅程中,美团平台/搜索与NLP部提供了问题推荐、问题理解、对话管理、答案供给、话术推荐和会话摘要等六大智能客服核心能力,以期达到低成本、高效率、高质量地与用户进行沟通的目的。本文主要介绍了美团智能客服核心技术以及在美团的实践。

1. 背景

目前,美团的年交易用户量为6.3亿,服务了770万生活服务类商家。此外,在美团优选业务中还有一个很大的团长群体。美团平台涵盖吃、住、行、游、购、娱等200多个生活服务品类,在平台服务的售前、售中、售后各个环节,都有大量信息咨询、订单状态获取以及申诉投诉等沟通诉求。另外,作为一家拥有几万名员工的上市企业,员工之间亦有大量的沟通诉求。面对以上这些需求,如果都是通过人力进行实现,显然不符合公司长远发展的目标,这就需要引入智能客服。

阅读更多

如何优雅地记录操作日志?

操作日志几乎存在于每个系统中,而这些系统都有记录操作日志的一套 API。操作日志和系统日志不一样,操作日志必须要做到简单易懂。所以如何让操作日志不和业务逻辑耦合,如何让操作日志的内容易于理解,让操作日志的接入更加简单?上面这些都是本文要回答的问题,主要围绕着如何“优雅”地记录操作日志展开描述。

1. 操作日志的使用场景

例子

系统日志和操作日志的区别

系统日志:系统日志主要是为开发排查问题提供依据,一般打印在日志文件中;系统日志的可读性要求没那么高,日志中会包含代码的信息,比如在某个类的某一行打印了一个日志。

阅读更多

字节跳动是怎么做全链路压测的?

背景

全链路压测指的是基于实际的生产业务场景、系统环境,模拟海量的用户请求和数据对整个业务链进行压力测试,并持续调优的过程。常用于复杂业务链路中,基于全链路压力测试发现服务端性能问题。

随着公司业务的不断扩张,用户流量在不断提升,研发体系的规模和复杂性也随之增加。线上服务的稳定性也越来越重要 ™,服务性能问题,以及容量问题也越发明显。为了及时暴露服务的各种稳定性问题,我们了引入了基于线上全链路压测的工具、研发体系。

本文主要介绍字节跳动的服务端全链路压测体系,以及字节跳动各种业务的全链路压测实践。

阅读更多

改善数据库安全的十一项技术

数据库里存储了大量个人信息,包括一些非常敏感的资料,让必须管理数据库的公司十分头痛。如今,运用各种高级工具和技术,数据库开发人员可以在保持信息私密的状态下放心执行各种操作。

这些解决方案靠的是数学的巧妙应用。其中一些最简单的机制不过是密码的现代版本,本质上就是经典解码轮的数字版。其他方案是更为复杂的扩展,利用数学交付更多灵活性与可靠性。大部分解决方案的创意已在实验室里流传了几十年,变得足够稳定,值得信任,最终形成实用版本。

这些算法正成为巩固业务关系并确保准确可信工作流的基础,方便企业在保护自身秘密的同时向客户提供个性化服务。而且,此类方法还能方便公司在不阻碍服务交付的情况下监管数据流,实现更好的合规。

阅读更多

统计学派的经典「数据分析方法」

Part1 描述统计

描述统计是通过图表或数学方法,对数据资料进行整理、分析,并对数据的分布状态、数字特征和随机变量之间关系进行估计和描述的方法。描述统计分为集中趋势分析和离中趋势分析和相关分析三大部分。

  • 集中趋势分析:集中趋势分析主要靠平均数、中数、众数等统计指标来表示数据的集中趋势。例如被试的平均成绩多少?是正偏分布还是负偏分布?
  • 离中趋势分析:离中趋势分析主要靠全距、四分差、平均差、方差(协方差:用来度量两个随机变量关系的统计量)、标准差等统计指标来研究数据的离中趋势。例如,我们想知道两个教学班的语文成绩中,哪个班级内的成绩分布更分散,就可以用两个班级的四分差或百分点来比较。
  • 相关分析:相关分析探讨数据之间是否具有统计学上的关联性。这种关系既包括两个数据之间的单一相关关系——如年龄与个人领域空间之间的关系,也包括多个数据之间的多重相关关系——如年龄、抑郁症发生率、个人领域空间之间的关系;既包括A大B就大(小),A小B就小(大)的直线相关关系,也可以是复杂相关关系(A=Y-B*X);既可以是A、B变量同时增大这种正相关关系,也可以是A变量增大时B变量减小这种负相关,还包括两变量共同变化的紧密程度——即相关系数。实际上,相关关系唯一不研究的数据关系,就是数据协同变化的内在根据——即因果关系。获得相关系数有什么用呢?简而言之,有了相关系数,就可以根据回归方程,进行A变量到B变量的估算,这就是所谓的回归分析,因此,相关分析是一种完整的统计研究方法,它贯穿于提出假设,数据研究,数据分析,数据研究的始终。

阅读更多

Spock单元测试框架介绍

1. 背景

​XML之父Tim Bray最近在博客里有个好玩的说法:“代码不写测试就像上了厕所不洗手……单元测试是对软件未来的一项必不可少的投资。”具体来说,单元测试有哪些收益呢?

  • 它是最容易保证代码覆盖率达到100%的测试。
  • 可以⼤幅降低上线时的紧张指数。
  • 单元测试能更快地发现问题(见下图左)。
  • 单元测试的性价比最高,因为错误发现的越晚,修复它的成本就越高,而且难度呈指数式增长,所以我们要尽早地进行测试(见下图右)。
  • 编码人员,一般也是单元测试的主要执行者,是唯一能够做到生产出无缺陷程序的人,其他任何人都无法做到这一点。
  • 有助于源码的优化,使之更加规范,快速反馈,可以放心进行重构。

阅读更多

安全多方计算:在不可信环境中创建信任

什么是安全多方计算?

术语“安全多方计算”(Secure Muti-party Computation,简称MPC,亦可简称SMC或SMPC)是指一组算法,这些算法允许人们通过网络协同工作,并安全地获取结果或计算值,且确保这一数值的正确性。

数学描述为:有n个参与者P1,P2,…Pn,要以一种安全的方式共同计算一个函数,这里的安全是指输出结果的正确性和输入信息、输出信息的保密性。

安全多方计算问题首先由华裔计算机科学家、图领奖获得者姚期智教授于1982年提出,也就是为人熟知的百万富翁问题:两个争强好胜的富翁Alice和Bob在街头相遇,如何在不暴露各自财富的前提下比较出谁更富有?

阅读更多

常识性概念图谱建设以及在美团场景中的应用

一、引言

在自然语言处理中,我们经常思考,怎么样才能做好自然语言的理解工作。对我们人类来说,理解某一个自然语言的文本信息,通常都是通过当前的信息,关联自己大脑中存储的关联信息,最终理解信息。例如“他不喜欢吃苹果,但是喜欢吃冰淇淋”,人在理解的时候关联出大脑中的认知信息:苹果,甜的,口感有点脆;冰淇淋,比苹果甜,口感软糯、冰凉,夏天能解暑;小孩更喜欢吃甜食和冰淇淋。所以结合这样的知识,会推理出更喜欢冰淇淋的若干原因。但是现在很多自然语言理解的工作还是聚焦在信息的层面,现在的理解工作类似于一个贝叶斯概率,从已知的训练文本中寻找符合条件的最大化文本信息。

在自然语言处理中做到像人一样去理解文本是自然语言处理的终极目标,所以现在越来越多的研究上,引入了一些额外的知识,帮助机器做好自然语言文本的理解工作。单纯的文本信息只是外部客观事实的表述,知识则是在文本信息基础之上对外部客观事实的归纳和总结,所以在自然语言处理中加入辅助的知识信息,让自然语言理解的更好。

阅读更多

比较Web开发技术AngularJS、ReactJS与VueJS

作为重要的业务支柱,我们在选择使用Web开发技术时,往往需要考虑待选技术在各个方面的优缺点。目前,无论是创业公司、还是独立软件提供商(ISV),普遍都会从AngularJS、React JS、以及Vue.js三个常用技术中进行挑选,毕竟它们都有着优秀的社区支持。为了进一步让您全面了解这三者之间的区别与优缺点,下面我将详细为您介绍与比较AngularJS、React JS和Vue.js。

市场份额占有比较

根据如下图给出的谷歌(Google)趋势分析结果,Vue.js的市场占有份额最高,React JS次之,AngularJS最少。当然,这只能说明三者的普及与使用程度,而并不能直接体现到底哪一种技术绝对优秀。下面让我们进一步来讨论他们在技术应用上的不同特点

阅读更多

手撕Java Agent实现“免费激活”

基础知识

Java Agent 算是JVM的一个插件,以一个Jar包的形式存在。可以做到在运行时期,修改你的字节码文件,从而达到增强、修改等效果,通过 JVM 提供的 Instrumentation API来实现。

第一个 Java Agent

一个Java Agent,由以下几个组件构成:

  • Agent Class – Agent的功能类
  • Packaging – 在MANIFEST.MF文件中定义Agent Class的位置和方式
  • “装载点”,比如-javaagent:<jarfile>[=arguments],指定加载的agent.jar文件

废话不多说,下面正式开始编写这个Agent。

阅读更多

Skywalking 源码分析 – Agent启动分析

1. 简介

前2篇介绍了 agent 如何去修改我们的业务代码,以及如何去收集、发送 trace 数据,但是agent的作用不仅如此,那么他还对我们的代码做了一些什么事情,会对我们的程序造成什么样的性能影响,本文将为你揭晓。

2 . BootService 接口

方法 SkyWalkingAgent#premain 之前讲解过这是 agent 的入口方法,这个方法的 前半部分都是在 加载配置文件、加载插件以及拦截了类加载器以便后面去修改字节码,在此之外agent还有最后一个步骤,就是去加载所有BootService接口的实现类。
阅读更多

Skywalking 源码分析 – Agent采集跟踪数据

1. 简介

本文源码解析使用的版本是 skywalking 7.0 , 不同版本实现上可能由一定差异,但是思想上大致相同

上篇文章介绍了skywalking-agent的整体架构以及插件的加载原理。

但是仅仅知道了他如何去加载插件,那至于在他使用agent去修改业务代码后如何去收集trace数据 那么请继续往下看

2. trace数据结构

在看源码之前,我们先来了解一下 在skywalkingtrace数据 是以什么样的数据结构去保存的,这里为了更清晰展示,这里选择从前端查看trace数据的结构

阅读更多

Skywalking 源码解析 – Agent加载原理

1 . 简介

本文涉及到的源码取自版本 : apache-skywalking-apm-7.0.0 ,不同版本实现差异可能会有一些区别,但是大体框架上没有变化的 , 一些地方为了方便理解,我拆分了 lamda 表达式,或者把一些写在一起的代码给做了拆分,但是整体逻辑是不变的

2. javaAgent

skywalking 是一个 分布式追踪系统 , 他可以帮助我们看到一个请求经过了多少个微服务,中途调用了多少数据库,redis,mq 等中间件, 要实现这样的功能,其实很简单只要在设计系统的时候, 每经过一次请求,每调用一次中间件,都把对应的日志给存起来, 然后提供一个 ui 服务,也同样能实现对应的功能. 但是如果这样做的话, 对代码就有很强的侵入性 , 每一个业务系统都需要修改,在业务代码里去加上对应的日志,对于喜欢偷懒的程序员来说,这是非常不舒服的.

阅读更多

流量回放与JVM SandBox

前言

做开发的人都知道自动化测试,自动化测试不需要人为去触发一个个行为,系统自动运行测试用例。价值不言而喻,但是如果自动化测试用例的缺失部分导致系统没完整测试回归可能会给系统带来风险。这里就是流量回放的价值:通过记录线上流量,在开发或者测试环境回放,来发现系统是否能够正常运行,降低代码变动整体系统带来的风险。

原理

通过AOP请求和响应的拦截,并且进行请求和响应的记录,在开发环境通过解析结果进行回放。

  • 什么是AOP

面向切面编程,spring的AOP就是一种实现。当然还可以很多其他实现,例如基于jvm的AOP,可以通过在通过装饰jvm中的class实现;例如其他语言也有对应的实现

阅读更多

背压(Backpressure)机制是什么

首先,Backpressure 并不是响应式编程(Reactive Programming,或者有的人喜欢按字直译为「反应式编程」)独有的;其次,Backpressure 并不是一种「机制」,也不是一种「策略」。Backpressure 其实是一种现象:在数据流从上游生产者向下游消费者传输的过程中,上游生产速度大于下游消费速度,导致下游的 Buffer 溢出,这种现象就叫做 Backpressure 出现。

编程中的 Backpressure 这个概念源自工程概念中的 Backpressure:在管道运输中,气流或液流由于管道突然变细、急弯等原因导致由某处出现了下游向上游的逆向压力,这种情况称作「back pressure」。这是一个很直观的词:向后的、往回的压力——back pressure。可是,国内的热力工程界对这个词的正式翻译是「背压」,把「back」翻译成了「背」,着实有点让人无力吐槽。

阅读更多

美团图数据库平台建设及业务实践

1. 前言

图数据结构,能够很自然地表征现实世界。比如用户、门店、骑手这些实体可以用图中的点来表示,用户到门店的消费行为、骑手给用户的送餐行为可以用图中的边来表示。使用图的方式对场景建模,便于描述复杂关系。在美团,也有比较多的图数据存储及多跳查询需求,概括起来主要包括以下 4 个方面:

  • 图谱挖掘: 美团有美食图谱、商品图谱、旅游图谱、用户全景图谱在内的近 10 个领域知识图谱,数据量级大概在千亿级别。在迭代、挖掘数据的过程中,需要一种组件对这些图谱数据进行统一的管理。
  • 安全风控: 业务部门有内容风控的需求,希望在商户、用户、评论中通过多跳查询来识别虚假评价;在支付时进行金融风控的验证,实时多跳查询风险点。
  • 链路分析: 包括代码分析、服务治理、数据血缘管理,比如公司数据平台上有很多 ETL Job,Job 和 Job 之间存在强弱依赖关系,这些强弱依赖关系形成了一张图,在进行 ETL Job 的优化或者故障处理时,需要对这个图进行实时查询分析。
  • 组织架构: 公司组织架构的管理,实线汇报链、虚线汇报链、虚拟组织的管理,以及商家连锁门店的管理。比如,维护一个商家在不同区域都有哪些门店,能够进行多层关系查找或者逆向关系搜索。

总体来说,美团需要一种组件来管理千亿级别的图数据,解决图数据存储以及多跳查询问题。海量图数据的高效存储和查询是图数据库研究的核心课题,如何在大规模分布式场景中进行工程落地是我们面临的痛点问题。传统的关系型数据库、NoSQL 数据库可以用来存储图数据,但是不能很好处理图上多跳查询这一高频的操作。

阅读更多

美团弹性伸缩系统的技术演进与落地实践

前言

稳定、高效、可靠的基础设施是互联网企业应对业务高峰流量的底层基石。作为美团统一的基础技术平台,基础技术部一直致力于通过业内前沿技术的落地,保障公司内部所有业务在线生产系统所依赖的基础技术平台能稳定、安全、低成本、可持续地运行与发展。

弹性伸缩系统是基于Docker开发的自动弹性伸缩平台,在美团经历了多年的发展。

早在2016年,美团就在线上环境中尝试使用容器环境,推出了基于OpenStack的容器集群平台Hulk 1.0。随着容器的落地,弹性伸缩1.0版本应运而生,它解决了扩容实例慢、扩容上线慢、资源回收慢、计算资源冗余等问题。

阅读更多

多租户架构

内容

  • 介绍
  • 单租户vs多租户
  • 数据库和多租户
  • 真实示例
  • 优点
  • 缺点
  • 用例
  • 概要

1. 简介

在多租户环境中,多个客户(租户)共享相同的应用程序,它们在相同的操作系统上,相同的硬件上以相同的数据存储机制运行。客户之间的区别是在应用程序设计期间实现的。客户不会共享或看到彼此的数据。与每个用户都有自己专用环境的专用系统相比,这样做的主要动机是降低每位用户的成本。

阅读更多

CAS和AQS底层原理

CAS(Compare And Swap)原理分析

字面意思是比较和交换,先看看下面场景(A 和 B 线程同时执行下面的代码):

int i = 10;  //代码 1
i = 20;      //代码 2

场景 1:A 线程执行代码 1 和代码 2,然后 B 线程执行代码 1 和代码 2,CAS 成功。

场景 2:A 线程执行代码 1,此时 B 线程执行代码 1 和代码 2,A 线程执行代码 2,CAS 不成功,为什么呢?

阅读更多

基于SSD的Kafka应用层缓存架构设计与实现

Kafka在美团数据平台的现状

Kafka出色的I/O优化以及多处异步化设计,相比其他消息队列系统具有更高的吞吐,同时能够保证不错的延迟,十分适合应用在整个大数据生态中。

目前在美团数据平台中,Kafka承担着数据缓冲和分发的角色。如下图所示,业务日志、接入层Nginx日志或线上DB数据通过数据采集层发送到Kafka,后续数据被用户的实时作业消费、计算,或经过数仓的ODS层用作数仓生产,还有一部分则会进入公司统一日志中心,帮助工程师排查线上问题。

阅读更多

美团移动端UI一致性解决方案

1. 背景

1.1 行业现状与问题

很多技术同学都知道,移动端往往比较侧重业务开发,这会导致人员规模不断扩大,项目复杂度也会持续增长。而为了满足业务的快速上线,很难去落实统一的设计规范,在开发过程中由于UI缺乏标准导致的问题不断凸显,具体体现在以下4个层面:

  • 设计层面:由于UI缺乏标准化设计规范,在不同App及不同开发语言平台上设计风格不统一,用户体验不一致;设计资源与代码均缺乏统一管理手段,无法实现积累沉淀,无法适应新业务的开发需求。
  • 开发层面:组件代码实现碎片化,存在多次开发的情况,质量难以保证;各端代码API不统一,维护拓展成本较高,变更主题、适配Dark Mode等需求难以实现。
  • 测试层面:重复走查,频繁回归,每次发版均需验证组件质量。
  • 产品层面:版本迭代效率低,版本需求吞吐量低,不具备业务的快速拓展能力。

阅读更多