架构

Redis中存储亿级键值对

迁移系统时,有时你必须建立一个小脚手架。我们最近不得不这样做:在Instagram上,于遗留原因,我们需要将大约3亿张照片映射到创建它们的用户的ID,以便了解要查询的分片(请参阅有关我们的更多信息)分片设置)。虽然所有客户端和API应用程序都已更新并向我们返回 完整信息,但仍有许多人缓存的旧数据。我们需要一个解决方案:1. 查找键并快速返回值2. 将数据存在内存中,理想情况下是在EC2高内存类型(17GB或34GB,而不是68GB实例类型)中3. 兼容我们现有的基础结构4. 持久化,以便在服务器宕机时我们不必重跑这个问题的一个简单解决方案是将它们简单地存储在数据库行中,其中包含“Media ID”和“User ID”列。但是,考虑到这些ID从未更新(仅插入)

  • yhblog
4 min read
后端

Java中的不可变数据结构

作为我最近一直在进行的一些编码访谈的一部分,有时会出现不变性问题。我自己并不过分教条,但每当不需要可变状态时,我会试图摆脱导致可变性的代码,这在数据结构中通常是最明显的。然而,似乎对不可变性的概念存在一些误解,开发人员通常认为拥有final引用,或者val在Kotlin或Scala中,足以使对象不可变。这篇博客文章深入研究了不可变引用和不可变数据结构。不可变数据结构的好处不可变数据结构具有显着优势,例如:没有无效的状态线程安全易于理解的代码更容易测试代码可用于值类型没有无效的状态当一个对象是不可变的时,很难让对象处于无效状态。该对象只能通过其构造函数实例化,这将强制对象的有效性。这样,可以强制执行有效状态所需的参数。一个例子: Address address = new Address(); address.setCity("Sydney"); // address is in

  • yhblog
6 min read
技术

我从Python到Go的旅程

我从Python到Go的旅程 Elad Leev BlockedUnblockFollow关注3月19日 我喜欢Python。在过去的五年里,它一直是我的首选语言。 Python非常友好且易于学习,同时仍然保持超级有效。 您几乎可以使用它 - 从创建简单的脚本和Web开发到数据可视化和机器学习。 但Go的成熟度,强大的用户群以及越来越多的公司在成功进行基准测试后决定转向Go的事实让我更加广泛地阅读了Go,并思考如何将其添加到我的工具集并将其好处应用到我的工作中。 但是这篇文章不会谈论哪种编程语言更好--Pix或Go,在线有很多关于这个主题的帖子和比较,而且在我看来它确实取决于用例。 在这篇文章中,我将告诉你我从Python到Go的旅程,并为你提供一些技巧,让你了解一些帮助我在这次旅程中取得成功的资源,然后现场讲述这个故事。 Egon Elbre的 GIF 我遇到的主要差异 当然,作为第一步,我浏览了令人惊叹的官方" Tour Of

  • yhblog
8 min read
架构

在物联网设备,边缘和云上分配机器学习算法

典型的物联网系统架构包括部署在物理空间中并且通常包括一个或多个传感器的设备(或节点); 在通信协议之间桥接并且位于相对靠近设备的集线器(或网关或边缘); 存储和处理数据的集中式云环境,以及用户可以与之交互,探索数据和获取通知的前端设备。显然,有些设备直接与云环境通信,设备充当前端设备的场景,但从逻辑上讲,这种架构描述了设置中的常见角色

  • yhblog
11 min read
架构

基于“大中台,小前台”架构的高可用电商交易中台最佳实践之四—高扩展性技术要点设计

本篇主要介绍交易中台如何做到高可扩展性,通过对在线交易业务梳理分析,可以发现变化部分主要来自两个方面,一方面是交易流程的不同,如虚拟商品交易流程就非常简单,而大家电类的交易流程就比较复杂;另一方面是来自交易流程环节中具体执行不同,如:地域限购, 有些业务是全国可售,有些业务只能是部分区域配送,作为中台,需要开放这些能力让业务自定义自己的能力。 因此我们将聚焦在流程和基础能力可扩展性上,对于流程的可扩性,需要能够按照业务来编排交易流程,自然是会用到流程引擎的技术。对于基础能力来说,更重要的是业务中台模型的抽象,预留能力扩展点,技术上使用osgi的扩展点模式。

  • yhblog
7 min read
架构

基于电商中台架构-商品系统设计(二):类目设计

一、概念定义1.什么是类目类目简单来说就是商品的分类,用大家最常用的淘宝来看,就是图中圈出来的地方。 为什么会有类目,也是其功能决定的,类目目前已经作为电商网站导航的标配,只是不同网站的类目不同罢了。如果我们的网站只有几十个、上百个商品,或许类目对于我们来说不重要,但是如果商品有成千上万个,甚至更多,那类目对我们来找到具有某些特点的商品就至关重要了。比如现在要找女式牛仔裤,可以通过类目 女装->牛仔裤 就能找到了;否则那就一页一页去搜索,就算我们平台商品质量再好,性价比再高,相信用户也会忍耐不住抓狂了。。2.前后台类目类目分为前台和后台类目。前台类目的存在主要是面向用户,搜索导航栏,这个是易变的,季节、营销活动都会影响类目导航;后台类目是直接和商品关联的,

  • yhblog
12 min read
架构

基于中台思想的物流系统设计(四):物流服务与物流详情

一、概述在物流系统中,中台只负责物流订单的流转,具体的物流履行往往需要对接第三方快递公司。由于第三方快递公司的技术标准不一样,因此我们需要对第三方快递公司的接口进行封装,这里涉及到两大类封装,一个是下发请求的封装,一个是接收回传的物流详情的封装。对于下发快递公司,我们不仅仅是接口层面的封装,而是抽象出了一套服务模板,让快递公司的物流服务以一种产品形式呈现给商家和用户。对于物流详情,我们会设计一套自己的数据模型,来对接不同的快递公司。二、物流服务1、概念模型物流服务从模型上又分成三个部分:服务模板、快递公司模型和运费模板。物流服务从流程上来说分成三个阶段:物流服务的表达、物流服务的路由、物流服务的履行。首先我们会录入快递公司,并且配置好快递公司的运费模板,然后我们会编辑服务模板,最后我们把可以提供相应服务的快递公司挂载到对应的服务模板下面。完成上面的步骤后,商家就可以针对不同的商品选择对应的服务模板,挂载了服务模板的商品在用户交易下单的时候是可以看到物流服务的,这时候就会让用户选择服务模板下的不同快递公司,

  • yhblog
8 min read
架构

基于中台思想的物流系统设计(三):构建物流地址能力

一、引言在电商物流领域我们会涉及到地址,其中包括了基础的四级地址和用户填写的地址。四级地址在整个从下单到收货的业务流程中都会用到,因此设计的时候要考虑如何最大限度地提高QPS。用户地址在下单的时候让用户填写或者选择,然后存在交易订单和物流订单上,后续的流程一般不会变,如果用户需要修改地址,直接变更交易订单和物流订单的地址信息即可,因此设计的时候主要考虑满足各种用户地址场景。二、物流地址数据模型设计1、dvc_division表描述:四级地址表表结构: 字段名称 字段类型 是否可以为空 描述 id bigint 否 主键 name varchar(128) 否 名称 code varchar(32) 否

  • yhblog
8 min read
架构

基于中台思想的物流系统设计(二):构建物流订单能力

一、引言物流订单能力作为基础能力,需要设计一套稳定的订单模型,以及一套能够在高并发环境下持续可用的接口。这些接口作为原子接口,供上层业务复用。上层业务无论多么复杂,通过这些原子接口,最终都会收敛到稳定的订单模型中来,这也是区分基础能力和产品服务的一个重要的边界。本文通过以下5点来介绍如何构建一套物流订单能力:1、模型设计2、状态机设计3、高并发创建接口4、高并发更新接口5、高并发查询接口二、物流订单数据模型设计首先来看ER模型一共四张表,主模型是logistics_order、logistics_order_package和logistics_order_item表,logistics_order_unique是去重表。1、logistics_order描述:物流订单主单表,整张表大概分为以下几部分信息表结构设计

  • yhblog
15 min read
架构

基于中台思想的物流系统设计(一)

一、总体设计在中台架构中,我们往往把一个系统划分为基础能力层和产品服务层。其中,基础能力层聚焦于稳定收敛的业务模型和基础服务本身,不会随着业务和前台产品的调整发生变化,平台产品层则专注于通过流程编排类的技术手段,将基础能力构建成业务的解决方案,解决共性和个性化的问题。基于上面所说的中台架构思想,我们把物流系统划分位物流基础能力层和物流产品服务层:本文将从宏观上来分别介绍物流基础能力和物流产品服务,至于微观上对各个系统的设计则会在后续系列文章中介绍。二、物流产品服务层整个电商物流体系包含三个主要流程:用户端流程、商家端流程和公共流程。这三个流程的交互如下图所示这三个流程中可以进一步划分出不同的业务执行节点,针对这些业务节点,我们在物流产品服务层定义出业务接口,这些业务接口可以通过扩展点支撑不同的业务特性,同时,这些业务接口组合起来又形成了一套物流业务流程。上面的说法比较抽象,下面会通过对每个业务节点的介绍,进一步说明这种设计思路。1、物流服务物流服务,其实就是一个物流解决方案,比如快递发货、仓配发货、城市配送等等。对于每一个物流服务,

  • yhblog
7 min read
架构

基于大中台架构的电商业务中台最佳实践之三:交易中台技术要点设计之高性能

主要介绍交易总体设计的技术要点设计,对于电商中台来说,交易系统是核心中的核心,一开始就需要围绕高性能,高可用,和高扩展三个方面来重点设计。本篇主要介绍高性能设计。 对于高性能的定义,通常可以理解为系统/服务接口响应时间低(rt)且并发量(qps,tps)高. 提高性能的主要策略有:选择合理的分布式事务处理机制,数据库的分库分表,读写分离,异步化,缓存,复杂查询走搜索。

  • yhblog
13 min read
架构

基于大中台架构的电商业务中台最佳实践之二:交易业务中台核心设计

业务中台化也就是解决这些问题的最佳选择,将交易域的核心能力和服务,通过梳理抽象沉淀为稳定外化的服务,通过预留的扩展点,来支持个性化扩展。扩展点的开发完全可以由业务团队的技术来进行,交易中台研发将专注于中台的建设和稳定性,这样讲大大改善开发协作效率,一个业务能不能跑的快,主要依赖于前台,当然业务中台的技术团队需要做好业务隔离和中台本身的稳定高效进化。

  • yhblog
10 min read
架构

基于大中台架构的电商业务中台最佳实践之一:业务中台总体架构介绍

架构总原则: 1. 大中台+小前台的架构思路 2. 业务中台采用领域驱动设计(DDD),在其上构建业务能力SAAS,持续不断进行迭代演进。 3. 平台化定位,进行了业务隔离设计,方便一套系统支撑不同玩法的业务类型和便于定制化扩展。 4. 前后端分离,通过服务接入层进行路由适配转发。 5. 天然的分库分表,消息解耦和分布式缓存设计,支持弹性扩容,以支持大数据高并发场景。

  • yhblog
9 min read
架构

基于电商中台架构-商品系统设计(一)

一、总体设计为什么采用中台架构前几篇已经说明了,这里就介绍一下基础层和平台层的功能。1. 基础层发布、编辑、上架、下架这些功能大家应该比较熟悉。审核:是否需要审核通过才允许上架打标:对商品进行标记,例如参加某种活动Sku管理:商品和sku关系关联关系:前后端商品关联关系、组合商品关联关系等前后端商品:前端商品面向用户,后端商品面向仓库类目:商品类目,前后端类目属性:商品属性、类目属性等等2. 平台层商品管理:商品的基本操作商品收藏:管理用户收藏的商品商品快照:保存商品编辑的每一个快照版本活动打标:根据不同的活动映射到商品属性上不同标记销量管理:商品的销量统计、以及排序操作浏览历史:用户浏览记录搜索:不同维度对商品的搜索二、概念定义1. Item-skuItem代表产品 sku代表商品举例:

  • yhblog
10 min read

Subscribe to 银河系技术日报

旨在发现全球技术深度好文,拒绝热点浮躁浅文,对于外文,受限于鄙人英语水平和效率,都采用AI机器翻译,如果觉得翻译不好,可以直接看原文。 希望对大家有启发帮助。