分类
外汇交易 外汇基本面

技术解析

图8.1 IBooster迭代

[Snowflake核心技术解读系列三]云原生技术

背景:2020年9月16日,Snowflake成功IPO,交易首日市场估值达到704亿美元,募集资金34亿美元。Snowflake成为迄今为止规模最大的软件IPO,市值最高突破1200亿美元。Snowflake提供基于云的数据存储和分析服务,一般被称为 "数据仓库即服务",它允许企业用户使用基于云的硬件和软件来存储和分析数据。Snowflake自2014年起在亚马逊S3上运行,自2018年起在微软Azure上运行,自2019年起在谷歌云平台上运行,其Snowflake Data Exchange允许客户发现、交换和安全地共享数据。[维基百科]
Snowflake取得了巨大的商业成功,技术是如何支撑起它的千亿美元市值呢?它技术强在哪?OLAP内核技术爱好者浙川为大家倾情解读Snowflake的核心技术原理。本文为该系列三。

云服务组件

多租户是Snowflake云服务组件非常重要的特点。云服务组件中的每一个组件,例如并发访问控制、优化器、事务管理器等,都是需要能够长期运行并可以被许多用户同时共享的。多租户的特性大大提升了系统的利用率,并且降低了系统的管理开销,相比于每个用户都会独立占用系统资源的传统架构,多租户可以降低系统的整体成本。
为了高可靠性和高可扩展性,每个云服务组件都会有自己的副本。因此,即便某个云服务组件挂掉,也不会导致数据丢失或者服务不可用。云服务组件挂掉可能会导致一些正在运行的查询任务失败,但由于数据没有丢失,Snowflake只需要简单地重新运行这些查询任务就行了。
查询管理与优化。用户的查询请求会首先发送到Snowflake的云服务组件上,云服务组件会对查询进行前期处理,包括查询解析、权限控制、查询计划优化、文件映射等。Snowflake的优化器采用了传统的自顶向下的瀑布模型(Cascades-style)和基于开销的优化(cost-based optimization,CBO)。优化器所依赖的统计数据,全部由Snowflake在数据加载和更新时进行自动统计。由于Snowflake并不支持索引,因此Snowflake搜索计划的空间会比较小。同时,Snowflake并不是在前期解析查询的是时候一并把所有计划都生成好,而是将一部分计划的生成推迟到执行阶段,比如针对join的数据分布计划就是在执行时才产生的。这样设计的优点是可以降低优化器生成低效计划的概率,同时也提升了系统的鲁棒性,而代价是可能查询执行的时候并不能获得极致的性能。更重要的是,这样的设计会使查询执行性能变得更加可预测,进而提升用户使用Snowflake的体验。
优化器产生的计划会下发给该查询对应虚拟仓库的所有计算节点上执行,当计划执行的过程中,云服务组件会持续不断地监测执行状态,统计性能指标并跟踪计算节点的健康情况。这些信息都是后续性能分析和日志审计的重要依据,并通过图形化接口向用户展示。
并发访问控制。Snowflake的并发访问控制也是在云服务组件中实现的。Snowflake的主要负载为分析型负载,分析型负载大多是复杂查询、批量插入、批量更新等。在这样的负载场景下,Snowflake通过ACID事务和快照隔离(snapshot isolation,SI)来实现并发访问控制。在快照隔离的机制下,一个事务内所有的读操作都会统一使用事务开始时的快照,这也意味着一个事务内所有的读操作都会看到同一个版本的数据,同时并发执行的另一个事务内的数据修改操作对这个事务的读操作来说是不可见的。
Snowflake的快照隔离机制是基于多版本并发控制(multi-version concurrency control,MVCC)实现的。由于Snowflake的表数据文件一旦存放到S3上,文件就不可以改变了,因此采用多版本并发控制是一个很自然的选择。在Snowflake中,如果想要修改一个文件,那么只能把这个文件删除,并用新的包含修改内容的文件来替换它。更进一步,在Snowflake中,如果对一个表做了写操作(数据插入、更新、删除),那么会对应产生一个新版本的表,旧版本表的文件都会被删除,新版本表的文件被重新添加进来。当然,除了涉及写操作的数据文件需要进行实际物理文件的删除和替换外,其他文件的删除和添加都是在元数据中进行操作。如前面章节所述,Snowflake的元数据管理就是key-value存储。
除了快照隔离外,Snowflake还使用快照来实现时间追踪和数据对象高效克隆。
剪枝。如何保证某个查询请求只访问和它相关的数据,是查询处理要解决的一个很重要的问题。传统数据库大多都会创建类似B+树索引来支持数据访问。尽管创建索引对于事务处理中的数据访问非常有效,对于类似Snowflake这样的系统来说,索引反而可能会带来很多问题。首先,索引会带来的很多的随机I/O访问请求,这对于采用列式存储(尤其带压缩)和S3的系统来说是一个非常严重的额外开销。其次,索引还会大幅增加实际存储的数据容量,以及增高数据加载时间。最后,索引还会降低用户的使用体验,尤其对于Snowflake来说:用户还需要花额外的时间和精力去主动地创建索引。
对于大规模数据分析场景来说,一个可以替代索引的技术为:min-max剪枝。对于一块数据来说(该块数据可以是一页,也可以是一个文件),系统会单独维护这块数据相关的元信息,其中最重要的元信息是这个块中数据的最大值和最小值。结合查询的过滤条件,这些min-max信息可以被用来判断该数据块内的数据是否会被查询用到。例如,假设数据块1中列x的min值是3、max值是5,数据块2中列x的min值是4、max值是6,那么对于包含where x>=6过滤条件的查询来说,数据块1中的数据肯定不会被用到,数据块2中的数据才会被用到。和索引不一样的是,类似min-max这样的元数据所消耗的空间非常小,而且访问会非常快。需要强调的是,这里的min-max不一定是数值(整数、浮点数)的min-max,还有可能是日期、字符等的min-max。
Snowflake非常适合采用这种剪枝技术:它不需要用户花时间和精力去做额外的操作;它所占空间比较小,具有良好的扩展性,并且易于维护;它非常适合大规模数据顺序访问的场景。另外,加载用来剪枝的元数据性能会非常快,而且分析这些元数据对于查询计划产生和执行来说开销并不大。Snowflake针对每个独立的表文件都会单独维护剪枝相关的元数据,元数据不仅会涉及到正常的关系型数据列,还会涉及到半结构化数据中的部分列。Snowflake会根据查询的过滤条件去检查对应的剪枝元数据,以便最小化查询执行时所需要的输入文件数。Snowflake的剪枝不仅能够处理简单的数值比较过滤条件,还能够处理类似in (5,6,7)这样的复杂过滤条件。除了上述的静态剪枝优化外,Snowflake还能够在执行时进行动态剪枝。例如,当在执行hash join的时候,Snowflake会收集build表数据中有关join键的分布信息,并将这些信息发送到probe表处理端,以便用来筛选和剔除probe表所不需要加载的数据文件。这些方案其实都是对现有技术(如bloom join)的扩展。

image.png

随时欢迎技术圈的小伙伴们过来交流^_^
AnalyticDB详情见:产品详情
AnalyticDB产品试用:产品试用
AnalyticDB知乎公众号:云原生数据仓库
AnalyticDB开发者社区公众号:云原生数据仓库
AnalyticDB开发者钉钉群:23128105

版权声明: 本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

【3DMM技术解析】FACEGOOD 推出10万点人脸关键点跟踪,重新定义工业级人脸3D重建

人脸关键点检测在安防、金融、娱乐等领域具有广泛的应用,可以说已经成为非常基础的算法,我们先来回顾一下它的发展历史,Tim Cootes & Chris Taylor在1995提出了一种新的方法(Active Shape Model)开创了人脸关键点对齐的先河,ASM引入了统计模型来解决对齐问题,紧接着三年之后,他俩在此基础上发展出了Active Appreance Model,这个方法有很重的历史地位,要知道当时人脸对齐问题是个很棘手的事,传统的CV算法太粗暴,难以应付人脸这种高纬特征,AAM之后算是进入了一个正确的方向,为后来神经网络方法奠定了基础,基本思想是ASM并没有考虑到纹理特征,只是对landmark训练了一个统计模型出来,AAM进一步优化了ASM,在回归的过程中加入了纹理特征,这样就解决了特征的泛化匹配的问题,使得人脸对齐更加鲁棒。20年之后,在众多研究者不断推动下2D人脸对齐问题已经彻底解决了,算法也已经白菜化,随便在github都有大量的精度不错的开源项目。

FACEGOOD 3DMM模型

图示1 BFM & SFM 模型

图示2 FACEGOOD 模型

FACEGOOD 超高精度流程

FACEGOOD Pose Estimation

· T.F. Cootes and C.J. Taylor and D.H. Cooper and J. Graham (1995). "Active shape models - their training and application". Computer Vision and Image Understanding

· Cootes, T. F.; Edwards, G. J.; Taylor, C. J. (1998). "Active appearance models". Computer Vision — ECCV'98. Lecture 技术解析 技术解析 Notes in Computer Science.

· Bilinear Model for 3D Face and 技术解析 Facial Expression Recognition,Iordanis Mpiperis,Fellow,IEEE,2008.

· Ekman 技术解析 and W. Friesen. Facial Action Coding System: A Technique for the Measurement of Facial Movement. Consulting Psychologists Press, Palo Alto, 1978.

· BRADLEY, D., HEIDRICH, W., POPA, T., AND SHEFFER, A. 2010. High resolution passive facial performance capture. ACM Trans. Graph. 29, 4 (July), 41:1–41:10.

· PIGHIN, F. H., SZELISKI, R., AND 技术解析 SALESIN, D. 1999. Resynthesizing Facial Animation through 3D Model-based Tracking. In Proc. 7th International Conference on Computer Vision, Kerkyra, Greece, 143–150.

· WEISE, T., BOUAZIZ, S., LI, H., AND PAULY, M. 2011. Realtime performance-based facial animation. ACM Transactions on Graphics (Proceedings SIGGRAPH 2011) 30, 4 (July).LIU, X., MAO, T., XIA, S., YU, Y., AND WANG, Z. 2008. Facial animation by optimized blendshapes from 技术解析 motion capture data. Computer Animation and Virtual Worlds 19, 3–4, 235–245.技术解析 技术解析

· LI, H., ADAMS, B., GUIBAS, L. J., AND PAULY, M. 2009. Robust single-view geometry and motion reconstruction. ACM Transactions on Graphics (Proceedings SIGGRAPH Asia 2009) 28, 5.

· BALTRUSAITIS, T., ROBINSON, P., AND MORENCY, L.-P. 2012. 3D constrained local model for rigid and non-rigid facial tracking. In Computer Vision and Pattern Recognition (CVPR 2012).

· CHUANG, E., AND BREGLER, C. 2002. Performance driven facial animation using blendshape interpolation. Tech. rep., Stanford University.

博世IBooster系统解析

(a)博世iBooster2.0 (b)大陆MC1 (c)日立EACT

2、iBooster二代产品

3、性能优势

  1. 不依赖真空源,取代了传统的真空泵和真空软管,体积更小,整个制动系统重量更轻,无需消耗能量建立真空源。同时,助力型式不受外界气压影响,让制动系统没有高原反应。

图3.2 IB与8+9助力器尺寸对比

图4.1 iBooster制动性能曲线

5、功能安全

5.1采用双安全失效模式

6、再生制动

与ESP hev 系统组合使用时,可实现最高达0.25g 减速度的能量回收。这是由于iBooster 能够通过软件控制,随时根据液压条件调节助力器伺服力。如此高的制动能量回收水平,使电动车辆的续航里程增加高达20%以上。

当驾驶员踩下制动踏板时,踏板行程传感器会计算驾驶员的制动请求。ESP hev 系统向电机请求与踏板行程相一致的制动扭矩并使车辆减速。由驾驶员脚部切换至制动系统的液压容积暂时保存在ESP hev 的低压蓄能器内,这意味着车轮制动不产生制动扭矩。如果电机不能利用回收方式满足制动请求,低压蓄压器中的可用容积将转移至车轮制动器,且车辆会通过传统制动进行减速。

图6.1 Ibooster制动能量回收

7、驾驶辅助

通过电机工作,IBooster 能够实现主动建压,而无需驾驶员踩下制动踏板。与典型的ESP系统相比,获得所需制动力的速度提高了三倍,并且可通过电子控制系统进行更加精确的调节。紧急情况下,IBooster 可在约120毫秒内自动建立全制动压力。这不仅有助于缩短制动距离,还能在碰撞无法避免时降低撞击速度和对当事人的伤害风险。

图7.1 无驾驶员参与的主动建压 https://www.zhihu.com/video/1213062362234093568

图7.2 IB应用车型的AEB 表现

8、自动驾驶

与ESP结合,IBooster 能够为自动驾驶提供冗余制动备份。IBooster 和ESP均可通过机械推动力,帮助车辆在任何减速情况下停止行驶。

图8.1 IBooster迭代

IDaaS 技术解析 | 单点登录技术之 Token 认证

IDaaS 即提供基于云的身份认证和管理服务的平台,确保在准确判定用户身份的基础上,在正确的时间授予用户正确的应用、文件和其他资源的访问权限。IDaaS 能提供多种标准化功能帮助用户实现高效、安全的身份认证管理服务,如单点登录、智能多因素认证、账号生命周期管理等等。 由于 IDaaS 在国内尚属于新兴产品形态,很多人对它只有模糊的印象,所以我们计划用一系列文章,深入浅出介绍 IDaaS 技术解析 相关的技术原理和细节。本文是“IDaaS 技术解析”系列的第一篇。

单点登录在技术上涉及协议对接、认证方式等诸多细节,我们这里先来聊聊认证方式。由于传统基于 Session 认证方式的局限性,目前单点登录技术中一般使用 Token 认证,它具有扩展性好、服务端负载轻、支持移动端访问、不需要CSRF防护等优势。下文将详细介绍 Token 认证的技术细节。

一、传统基于 Session 的认证方式

在介绍 Token 认证前,先简单介绍一下传统基于 Session 的认证。早前由于 Http 协议无状态的特性(每次客户端和服务端会话完成时,服务端不会保存会话信息,包括用户上一次登录时输入的用户名和密码),于是基于 Session的有状态的认证方式逐渐成为一种流行技术方案,以减少用户在登录客户端时输入用户名和密码的认证操作次数。

简单来说,基于 Session 的认证就是让客户端和服务端之间的认证会话以Session的形式进行存储,并通过在服务端和客户端之间传输 Session,来实现两方之间的身份认证交流。具体流程如下:

2. 服务端用户身份验证通过,生成 Session,并存入数据库中;

3. 客户端在浏览器上生成 Cookie,并把 Session 写入其中;

4. 用户在客户端后续有新的请求,都会在请求时携带 Session,并发给服务端;

5. 如果客户端 log out,之前生成的 Session 会在客户端和服务端都会被销毁。

虽然 Session 认证有效解决了客户端多次输入用户名和密码的问题,但存在诸多弊端:

  • 服务端成本上升:每个用户在客户端进行登录操作后,服务端都需要进行一次 Session 记录,随着注册用户不断增多,存储 Session 就会占用大服务器内存,大型应用可能还需要借助数据库或者一系列缓存机制存储 Session。
  • 无法横向扩展: Session 认证方式在跨服务或跨域的资源共享方面表现很差。比如,多个子域名提供同一个应用服务,或者单点登录中用户通过一套用户名和密码同时登录多个应用系统,Session 认证方式在这样的场景中就无法再起作用,尤其是对于分布式应用而言,这种认证方式很难在多个服务器负载上进行横向拓展。
  • CSRF跨站点请求伪造(Cross—Site Request Forgery): Cookies 存在很多不安全因素,如果 技术解析 Cookies 被截获,用户就会很容易受到 CSRF 的攻击,导致数据泄露。

二、基于 Token 的认证方式

Token 认证是无状态的,其核心是签名和验签。客户端每次向服务端发送请求时都会携带 Token,这里的 Token 是服务端用自己的密钥签名的,当服务端接收到 Token 时会用自己的密钥去验签,判断这个 Token 是否是自己签发的,进而对用户身份进行验证。具体流程如下:

3. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端(一般用哈希算法再加个随机数);

4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;

5. 客户端每次向服务端请求资源的时候需要携带服务端签发的 Token;

从以上流程中可以看到,相较于传统的 Session 认证,Token 认证在成本、可扩展性和安全性等方面都有一定的优势:

  • 服务端负载减轻:服务端无需对生成的Token进行保存,只需要对Token进行签发和验签即可。Token中写入很多身份验证中所需要的信息,比如哈希签名算法、用户信息和签名,服务端的负载会减轻许多。
  • 通过API实现横向扩展:基于Token的认证通过API调用的方式,可以将Token认证应用到不同的服务和域中,使分布式应用的身份认证实现起来更高效便捷。
  • 不需要CSRF防护:由于不需要依赖Cookie,自然不用担心Cookie被截获,以及由此引发的用户信息被伪造登录的问题。
  • 支持移动端访问:Cookie本身不支持手机端访问,Token认证机制在移动端具有极大的优势。

JSON Web Token(JWT)是目前在单点登录实践中最为通用的Token认证方式。JWT包含头部(header)、载荷(payload)和签名(signature)三部分。IDP(Identity Provider,即身份服务提供者)会将用户数据以加密的形式写入JWT,SP(Service Provider,服务提供者)会对 JWT 进行存储,IDP 会在随后的 SP 每次请求中对 JWT进 行验签和确认,从而有效确保用户私密信息不会被盗。

举个例子,玉符 IDaaS 在单点登录上采用 JWT 进行身份认证的 Token 签发和验签,整个过程中没有密码等私密信息的传递,只会在跨服务器的信息共享中传输像邮箱这样的身份标识符号,这样可以从根本上规避身份认证信息泄露引发的数据泄露问题。

当然软件工程的世界里没有“银弹”,我们在玉符IDaaS设计中采用了多种机制为Token的安全加码——

  • 采用 HTTPS 的形式对 Token 进行加密,对于常见的浏览器和操作系统,强制使用 TLS1.2 协议,而禁用 SSLv3(SSL MODE SEND FALLBACK SCSV)。服务所用 HTTPS 证书来自知名证书机构 GeoTrust,具有极高可用性,最高 256 位 SSL 加密,杜绝中间人监听
  • 在 JWT 和对接应用服务之间采用定期密钥轮转机制,所有颁发的 Token 都具备强时效性,防止 Token 的超前使用或者过期使用,同时支持一次性 Token,使用过的 Token 也可以被记录并禁止二次使用,从而降低偷窃者破解使用 Token 的可能性;
  • 对于 Cookie 的安全,玉符全域防止 Cookie 挟持(Hijacking)和重放攻击(Replay Attacks),并且所有超过 5 分钟有效期的 Cookie 都可以在受威胁情况下强制失效,有效确保存储在 Cookie 中 Token 信息的安全。

后续我们将继续带来更多 IDaaS 身份认证管理领域的技术解读,欢迎关注我们的专栏,或留下你的想法与我们交流~