Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >易语言生成COS签名

易语言生成COS签名

原创
作者头像
yjwang
发布于 2022-01-23 11:09:25
发布于 2022-01-23 11:09:25
8.6K00
代码可运行
举报
运行总次数:0
代码可运行

今天教大家如何设计一个 鲜花商城 , 基于目前主流的技术:前端vue3,后端springboot。学习完这个项目,你将来找工作开发实际项目都会又很大帮助。文章最后部分还带来的项目的部署教程

系统有着基于用户的协同过滤推荐算法,还有保证库存不超卖的库存系统设计,还带有订单(发货,收获,退款,评价),购物车,运费等某块功能的设计,基本上符合将来工作上的实际项目。

视频演示

图片演示

系统功能概述

分类管理

首先,系统将鲜花按照功能分为4个大的类目(当然你也可以在管理后台修改):

  • 爱情鲜花
  • 友情鲜花
  • 商务鲜花
  • 永生花

对应着后台就是分类管理, 前端会在 全部鲜花板块展示这个分类。

首页管理

首页有轮播图,华语知识,鲜花分类,精品推荐,新品上架几大模块。

轮播图: 在后台的轮播图管理,能够对前端首页的轮播广告进行管理, 支持点击跳转到外部链接。

花语知识: 查询最近10条的花语文章。这个可以在后台管理的花语知识甘管理里面配置文章。

鲜花分类: 这个可以在后台管理的字典管理里面配置,系统将鲜花分为了:康乃馨,百合花,向日葵,郁金香,紫罗兰,满天星,玫瑰花,永生花 。 这些类别在前端的全部鲜花板块中可以进行筛选。

精品推荐: 查询销量的top前8个鲜花商品。销量会在用户支付接口调用后新增商品销量,并且用户退款不支持减去销量。

新品上架: 查询商品按照创建时间倒叙的top前8个鲜花商品。

商品管理

这个是系统的核心, 商品的很多属性,主要有: 名称,分类,多张商品图片,商品详情的动态属性,商品详情,spu等。在后台管理的商品管理里面可以对商品进行上下架,商品新增,修改,切不可删除。因为商品关联了很多表,如果不卖该商品了,只能作下架处理。

spu库存管理

spu是商品的最小单元,当用户买玫瑰鲜花时,有可能是99多玫瑰,999多玫瑰,这些都是不同的规格, 每个规格有不同的库存和价格。用户购买时,都需要选中到具体的哪个规格才能保证下单。

在后台管理的库存管理,就可以对所有商品的spu规格进行管理,可以新增,减少库存。还有详细的库存日志可查。

评价管理

评价是商城不可或缺的一部分,很多用户就是看评价下单的,我们的评价有内容,还支持多张图片,还有评分等级。可以说是一个很丰富的评价体系 。这个评分还参与了用户协同过滤推荐系统。用户只有当订单处与完成状态时,才可以对商品进行评价。

在后台管理的商品管理下面的评价管理可以查看和删除用户的评价。

用户管理

用户有头像,用户名,邮箱,密码,是否禁用,当前收获地址等属性。用户前端注册是通过邮箱验证码来注册,所以系统初始化时,需要在后台管理的字典管理的系统字典里面设置好邮箱服务器,然后才可以进行正确的注册。

用户登录可以通过用户名或者邮箱登录。当后台管理将用户禁用后,登录失效。

前端可以对用户的用户名,头像进行修改, 还可以修改默认的收获地址。

运费管理

运费首先是有一个运费模板,商品上架时选中这个运费模板, 如果模板是包邮的,则前端显示鲜花商品的邮费就是包邮,下单接口也会计算这个邮费。

如果模板里面是不包邮的,那么就需要关联多个运费规则,每个运费规则有省市区 和 运费 两个属性,这样当用户下单的收获地址匹配到了运费规则 的地区,就可以拿到运费进行计算 订单价格。

花语知识

这个板块是鲜花商城的一个吸引模块, 主要承载一些鲜花知识的文章,可以在后台进行新增和编辑,还有删除 鲜花知识。

购物车

用户浏览鲜花时, 可以对鲜花商品进行收藏处理,收藏后可以在后台管理的用户列表的操作列看到查看收藏。前端用户自己也可以进行收藏取消等。

订单管理

我们将订单的状态设计成以下几种:0-待付款 1-待发货 2-待收货 3-待评价 4-已完成 5-退款中 6-已退款 7-已取消。 订单状态扭转流程:

1. 用户点击购买商品或从购物车点击,则商品进入待付款状态,此时,商品库存被锁,也就是实实在在的扣减了销售库存。

2. 当30分钟超过后,用户未支付上面的待付款订单,则订单状态扭转为已取消,库存回流,此笔订单结束。

3. 当用户30分钟内支付后,订单扭转为代发货。

4. 管理员登录管理后台,将待发货订单进行发货操作后,订单状态变成待收货。

5. 用户可以对待收获订单进行收获和退款操作,如果是退款,则变成退款中,管理员进行退款确认,确认后,订单变成已退款,退款成功后,库存回流。此订单结束。

6. 如果用户确认收获,则订单变成待评价,用户可以进行评价,评价完成后,订单变成已完成,此订单结束。

收货地址

每个用户新注册是没有收货地址的,如果此时下单鲜花,也是无法下单。需要在个人中心去新增收获地区,收货地址有:省市区,具体的联系人,手机号,具体地址信息。

用户可以增加很多收货地址, 同时用户可以在修改资料时,切换已经存在的收货地址。

核心功能实现思想

库存系统的设计

库存最大的问题就是超卖,也就是说有多个人同时并发下单,库存需要保持一致性,不会扣减到小于0的情况。普通的设计就是加一个全局锁。每个人下单都需要等待上一个人下单完成。

这样严重影响效率。这里我们库存的设计流程如下:

1. 首先我们将库存分为 数据库库存销售库存。 数据库库存就是存储到数据库的商品库存值,销售库存就是用户下单,页面所在的库存值。

2. 后台管理上架商品时,会设置一个初始库存,我们将初始库存存储到数据库库存销售库存 。

3.当用户下单时,不是直接扣减的数据库库存,而是通过redis的 decrement 方法,对销售库存进行扣减。但是redis的扣减操作这里还不是一个原子性操作,需要先从redis查出库存,然后进行decrment操作。这两步操作我们用reddsion的分布式锁来控制原子性,同时,我们将加锁的维度控制到了商品id。这样大大提高了并发效率。

4. 库存扣减后,我们又通过redis消费队列,实现了对数据库库存的同步。这样保持了redis库存和数据库库存的一致性。

5. 后台我们设计的是对商品只能加加库存,和减少库存的操作,而不是直接修改库存值。如果你直接修改库存值,就有可能会导致库存数据不一致,难以跟踪。

6. 我们还设计了库存的扣减,新增日志,方便对库存进行跟踪管理。

库存扣减的部分代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
     * 扣减库存(使用Redisson分布式锁)
     * @param quantity 扣减数量
     * @return true-扣减成功,false-扣减失败(库存不足)
     */
    public boolean deductInventory(Integer spuId, int quantity) {
        String lockKey = "lock:inventory:" + spuId;
        String inventoryKey = "inventory:" + spuId;

        RLock lock = redissonClient.getLock(lockKey);

        try {
            // 尝试加锁,最多等待10秒,锁过期时间30秒
            boolean locked = lock.tryLock(10, 30, TimeUnit.SECONDS);
            if (locked) {
                String stock = (String) redisTemplate.opsForValue().get(inventoryKey);
                if (StringUtils.isEmpty(stock)) {
                    return false;
                }
                if (Integer.parseInt(stock) < quantity) {
                    return false;
                }
                // 扣减库存
                redisTemplate.opsForValue().decrement(inventoryKey, quantity);
                return true;
            }
            return false;
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            return false;
        } finally {
            // 释放锁
            if (lock.isHeldByCurrentThread()) {
                lock.unlock();
            }
        }
    }

用户协同过滤算法的设计

协同过滤(Collaborative Filtering, CF)是推荐系统中最经典的算法之一,其核心思想是通过用户的历史行为数据(如评分、点击、购买等)发现用户或物品的相似性,并基于这种相似性进行推荐。协同过滤分为两大类:基于用户的协同过滤和基于物品的协同过滤。 算法的步骤 1. 获取所有用户行为数据,构建用户-物品评分矩阵。 2. 目标用户与其它用户的相似度计算: 将用户对商品的评分视为向量,计算余弦相似度。 3. 选取与目标用户相似度最高的 k 个用户作为邻居 。 4. 通过邻居用户的评分进行加权平均预测(权重为用户相似度)。 5. 将预测评分按降序排序,选择评分最高的N个物品作为推荐结果。 举例说明

用户评分矩阵的构建

需要借助Array2DRowRealMatrix算法工具,Array2DRowRealMatrix 是 Apache Commons Math 库中的一个类,用于表示二维实数矩阵,并提供矩阵运算功能。

maven依赖如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-math3</artifactId>
            <version>3.6.1</version>
  </dependency>

构建评分矩阵的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 获取所有用户的行为数据,用于构建用户-物品评分矩阵
        List<UserBehavior> allBehaviors = userBehaviorRepository.selectList(null);

        if(CollectionUtils.isEmpty(allBehaviors)) {
            return Collections.emptyList();
        }

        // 构建用户和物品的索引映射,方便后续构建评分矩阵
        Map<Long, Integer> userIndex = new HashMap<>();
        Map<Long, Integer> itemIndex = new HashMap<>();
        // 提取用户id
        List<Long> users = allBehaviors.stream().map(UserBehavior::getUserId).distinct().collect(Collectors.toList());
        // 提取物品id
        List<Long> items = allBehaviors.stream().map(UserBehavior::getItemId).distinct().collect(Collectors.toList());
        for (int i = 0; i < users.size(); i++) {
            userIndex.put(users.get(i), i);
        }
        for (int i = 0; i < items.size(); i++) {
            itemIndex.put(items.get(i), i);
        }
        // 初始化评分矩阵,行表示用户,列表示物品   一个 users.size() x  items.size() 大小的矩阵
        RealMatrix ratingMatrix = new Array2DRowRealMatrix(users.size(), items.size());
        // 根据用户行为数据填充评分矩阵
        for (UserBehavior behavior : allBehaviors) {
            if (behavior.getRating() != null) {
                int uIndex = userIndex.get(behavior.getUserId());
                int iIndex = itemIndex.get(behavior.getItemId());
                // 设置 矩阵的 行,列 值 为 评分
                ratingMatrix.setEntry(uIndex, iIndex, behavior.getRating());
            }
        }

余弦相似度计算

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
     * 计算两个向量的余弦相似度
     * 余弦相似度用于衡量两个用户的评分模式的相似程度
     * @param vector1 第一个用户的评分向量
     * @param vector2 第二个用户的评分向量
     * @return 相似度值,范围[-1,1],值越大表示越相似
     */
    private double calculateCosineSimilarity(double[] vector1, double[] vector2) {
        double dotProduct = 0.0;
        double norm1 = 0.0;
        double norm2 = 0.0;

        for (int i = 0; i < vector1.length; i++) {
            dotProduct += vector1[i] * vector2[i];
            norm1 += vector1[i] * vector1[i];
            norm2 += vector2[i] * vector2[i];
        }

        if (norm1 == 0 || norm2 == 0) return 0;

        return dotProduct / (Math.sqrt(norm1) * Math.sqrt(norm2));
    }

根据余弦相似度计算取5个相似的用户作为邻居

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 计算目标用户与其他用户的相似度
        int userIdx = userIndex.get(user.getId());
        Map<Integer, Double> userSimilarities = new HashMap<>();

        for (int i = 0; i < users.size(); i++) {
            if (i != userIdx) {
                // 计算 当前用户 与其他的每一个用户的评分向量的 余弦相似度
                double similarity = calculateCosineSimilarity(ratingMatrix.getRow(userIdx), ratingMatrix.getRow(i));
                userSimilarities.put(i, similarity);
            }
        }

        // 选择最相似的5个用户作为邻居用户
        List<Integer> similarUsers = userSimilarities.entrySet().stream()
            // 按相似度值降序排序
            .sorted(Map.Entry.<Integer, Double>comparingByValue().reversed())
            // 取前5个最相似用户
            .limit(5)
            // 提取用户索引
            .map(Map.Entry::getKey)
            .collect(Collectors.toList());

最后是计算加权平均,当中还需要进行 归一化处理, 来避免了因用户群体整体相似度偏高/偏低导致的预测偏差,使得推荐结果更贴近用户的真实偏好。 整体代码较长,我就不贴了。 商品系统的设计

鲜花商品的相关表结构如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE `product` (
  `product_id` int NOT NULL AUTO_INCREMENT COMMENT '商品id',
  `product_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '商品名称',
  `category_id` int NOT NULL COMMENT '类目id',
  `product_title` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '商品标题',
  `product_intro` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '商品详情',
  `product_picture` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '商品封面图',
  `spu0_price` double NOT NULL COMMENT '参考价,商品第一个spu的价格',
  `product_sales` int NOT NULL COMMENT '销量',
  `state` tinyint DEFAULT '0' COMMENT '0-上架  1- 下架',
  PRIMARY KEY (`product_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=67 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='商品';

CREATE TABLE `product_spu` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT 'id',
  `product_id` int NOT NULL COMMENT '商品id',
  `spu_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '规格的key名称,比如尺码',
  `spu_value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '规格的key的值,比如尺码的大小是S',
  `spu_price` double NOT NULL COMMENT '商品售卖价',
  `spu_stock` int NOT NULL COMMENT 'spu库存',
  `state` tinyint DEFAULT '0' COMMENT '0-上架  1- 下架',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='商品最小单元';

CREATE TABLE `product_picture` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `product_id` int NOT NULL COMMENT '商品id',
  `product_picture` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '商品图片',
  `intro` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=315 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='商品图片';

商品还有一个动态的字典属性

动态字典属性表设计

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE `product_attr` (
  `id` int NOT NULL AUTO_INCREMENT,
  `product_id` int NOT NULL,
  `product_attr_config_id` int NOT NULL COMMENT '商品属性字典id',
  `attr_val` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '属性值',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=295 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='商品属性与字典关联';

订单表设计如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE `orders` (
  `order_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
  `user_id` int NOT NULL COMMENT '用户id',
  `spu_id` int NOT NULL COMMENT '商品id',
  `spu_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'spu的名称',
  `spu_value` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'spu的值',
  `product_num` int NOT NULL COMMENT '商品数量',
  `order_state` int NOT NULL COMMENT '订单状态 0-待付款 1-待发货 2-待收货 3-待评价 4-已完成 5-退款中 6-已退款 7-已取消',
  `product_price` double NOT NULL COMMENT '下单商品价格',
  `shipping_price` double NOT NULL COMMENT '下单运费价格',
  `refund_cause` varchar(2255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '退款原因',
  `order_remark` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '订单备注',
  `pay_type` int DEFAULT NULL COMMENT '支付方式:0-支付宝 1-微信',
  `address` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '收获地址',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`order_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='订单';

运费的设计

首先需要有一个模板表 , 上架商品时, 直接选中到这个运费模板

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE `shipping_template` (
  `template_id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '模板名称',
  `is_free_shipping` tinyint(1) DEFAULT '0' COMMENT '是否包邮(0否1是)',
  PRIMARY KEY (`template_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='运费模板表';

每个模板有着自己的运费规则, 规则里面重要的就是城市信息。每个城市的运费都不一样。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE `shipping_rule` (
  `id` int NOT NULL AUTO_INCREMENT,
  `template_id` int NOT NULL COMMENT '运费模板ID',
  `city_id` int NOT NULL COMMENT '地区编码(可多级)',
  `first_fee` double NOT NULL COMMENT '该地域的运费',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='运费规则表';

最后,有一个城市表 , 记录着中国的省市区数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE `city` (
  `id` int NOT NULL COMMENT '主键',
  `name` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '省市区名称',
  `parentid` int DEFAULT NULL COMMENT '上级ID',
  `shortname` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '简称',
  `leveltype` tinyint DEFAULT NULL COMMENT '级别:0,中国;1,省分;2,市;3,区、县',
  `citycode` varchar(7) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '城市代码',
  `zipcode` varchar(7) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '邮编',
  `lng` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '经度',
  `lat` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '纬度',
  `pinyin` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '拼音',
  `status` enum('0','1') CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC;

三. 技术栈概述

后端技术栈: JDK8 + springboot + mysql8

前端技术栈: vue3 + Axios 等

四. 项目部署教程

前端部署 安装node , 版本:v22.15.0 , 安装完成后。 进入到项目 hadluo-shop-webadmin 目录下,这个项目是vue的管理后台, 右键,运行cmd,运行下面命令: npm run dev 由于我已经跟你npm install好了,所以你无需执行,直接run就可以了!! 运行项目

进入到项目 hadluo-shop-h5 目录下,这个项目是vue的前端, 右键,运行cmd,运行下面命令: npm run dev 由于我已经跟你npm install好了,所以你无需执行,直接run就可以了!! 运行项目

到此前端项目部署完成。 执行sql

自己安装好数据库,注意,必须是mysql8 ,否则代码运行会出错。新建一个wxhadluo-flowers 数据库, 然后执行 “wxhadluo-flowers.sql” Redis安装

项目需要安装redis,直接下载一个windows版本的redis即可,没有的联系我。 启动后端项目

然后部署后端 , 打开idea, 导入maven工程 hadluo-bookshop。

打开resources目录, 修改 application.yml 配置文件,主要修改下面几个信息:

然后启动 main 启动类 : Application.class

五. 访问项目

管理后端: http://localhost:3001/ 账号:wx-hadluo, 密码: 123456 前端: http://localhost:3000/ 用户: wxhadluo / 123456 可以自己注册用户。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2023爱分析・可观测性平台市场厂商评估报告:乘云科技
IT运维是企业信息化建设中不可或缺的一环,其作用在于确保系统稳定性、提高效率和降低成本,对企业的业务生产和服务质量有着至关重要的影响。自十四五规划以来,随着企业数字化转型的加速推进,以及信创转型的大规模铺开,企业IT架构复杂度日益上升,直接引发了对自身运维体系的更高要求。但与此同时,在政策、需求及供给端的多重因素驱动下,IT运维产业也迎来了前所未有的重大发展机遇,具体如下:
爱分析ifenxi
2023/05/09
4030
2023爱分析・可观测性平台市场厂商评估报告:乘云科技
FA15# 日志平台演进点梳理
可观测数据平台需至少整合Logging(日志)、Metrics(指标)、Tracing(链路)三个基本类型数据,并延伸events(事件)、网络流量、用户行为分析、审计、基础的IT设施监控等各类数据的融合。
瓜农老梁
2022/06/23
3940
FA15# 日志平台演进点梳理
用户案例 | 腾讯小视频&转码平台云原生容器化之路
李汇波,腾讯业务运维高级工程师,目前就职于TEG 云架构平台部 技术运营与质量中心,现负责微信、QQ社交类业务的视频转码运维。 摘要 随着短视频兴起和快速发展,对于视频转码处理的需求也越来越多。低码率高清晰,4K、超清、高清、标清适配不同终端和不同网络环境来提升用户体验,以及水印、logo、裁剪、截图等多样化的用户需求。 对于资源的多样化需求和弹性扩缩容也需要快速响应,而随着公司自研上云项目的推进,设备的稳定性和多样性可提供更多选择,来满足像朋友圈、视频号、广告、公众号等转码业务快速、稳定、抗突发的资源需
腾讯云原生
2021/11/17
1.4K0
干货 | 携程监控系统Hickwall演进之路
作者简介 大伟,携程软件技术专家,关注企业级监控,日志,可观测性领域。 一、背景 监控领域有三大块,分别是Metrics,Tracing,Logging。这三者作为IT可观测性数据的三剑客,基本可以满足各类监控、告警、分析、问题排查等需求。 Logs:我们对于Logs是更加宽泛的定义,即记录事物变化的载体,包括常见的访问日志、交易日志、内核日志等文本型以及GPS、音视频等泛型数据。日志在调用链场景结构化后其实可以转变为Trace,在进行聚合、降采样操作后会变成Metrics。 Metrics:是聚合后的数
携程技术
2022/03/04
1.8K0
腾讯云小微AI语音助手云原生之路
云原生(CloudNative)是一个组合词,“云”表示应用程序运行于分布式云环境中,“原生”表示应用程序在设计之初就充分考虑到了云平台的弹性,就是为云设计的。可见,云原生并不是简单地使用云平台运行现有的应用程序,而是一种能充分利用云计算优势对应用程序进行设计、实现、部署、交付和操作的应用架构方法。
俞淦
2022/11/08
15.2K0
腾讯云小微AI语音助手云原生之路
【腾讯云应用性能观测x日志服务】:链路日志关联,加速故障定位
顾自然 腾讯云监控产品经理,硕士毕业于墨尔本大学。目前主要负责腾讯云业务层监控相关产品策划工作,对应用监控和运维领域有深刻理解。 前言 随着微服务架构的逐渐流行,在熵增且庞杂的系统中准确的定位一个请求的完整生命周期,逐渐成为了研发同学面对的最大的痛点之一,以研发同学自测过程为例,开发同学往往希望在发起测试的 Http/RPC 请求后,能够通过一个简单的方式获取整个测试请求的上下文信息。这其中通常包括相关的上下游链路、各个服务内部请求的方法堆栈,以及链路上打印的日志等数据,对于指标-链路-日志的一体化监控的需
腾讯云可观测平台
2022/03/24
1.4K0
全量容器化:腾讯云日志服务CLS的云原生破局之道
数字化转型的本质是一个企业不断打破自我壁垒的过程,这种壁垒的打破通常来源于两个方面,一个是技术重构,另一个是组织重构。本次分享主要侧重的是技术重构方面,将围绕如何实现应用现代化,以业务视角找到实现业务云原生化的破局之道,从而获得更高的业务价值。
日志服务CLS小助手
2023/05/08
6050
分钟级落地,基于腾讯云ES Serverless的云原生容器服务日志分析
作为云原生技术的爱好者,笔者活跃在各种开发者社群,这不,又让我发现了一个宝藏:腾讯云Elasticsearch Serverless服务,具备自动弹性、免运维的特性,丰富的产品能力,能分钟级实现容器服务的日志采集与可观测分析。当然,秉持着“不吃独食”的开源心态,为了让大家也能免费体验到这款开箱即用的产品,笔者连着请小编吃了一周的宵夜,最终领取到了免费体验卷➕资源包特惠1元购➕开发者课程(也有免费代金券,爱了!)等满满福利,具体领取方式可见文末相关链接。
用户10023828
2024/05/14
5380
最佳案例 | 游戏知几 AI 助手的云原生容器化之路
张路,运营开发专家工程师,现负责游戏知几 AI 助手后台架构设计和优化工作。 游戏知几 随着业务不断的拓展,游戏知几 AI 智能问答机器人业务已经覆盖了自研游戏、二方、海外的多款游戏。游戏知几研发团队主动拥抱云原生,推动后台业务全量上云,服务累计核心1w+。 通过云上的容器化部署、自动扩缩容、健康检查、可观测性等手段,提高了知几项目的持续交付能力和稳定性,形成了一套适合游戏知几自身的上云实践方案。本文将会介绍游戏知几项目中遇到的痛点以及探索出的一套可靠的上云实践方案。 知几项目背景 游戏知几[1]是一款游戏
腾讯云原生
2022/05/18
1.6K1
最佳案例 | 游戏知几 AI 助手的云原生容器化之路
云原生背景运维转型之 SRE 实践
作者:yorkoliu,腾讯 IEG 业务运维专家 一、前言 上一篇文章《云原生背景下的运维价值思考与实践(上)》 重点介绍了云原生背景下运维转型的思考,围绕着整个 DevOps 交付链,贴近业务不断输出运维的能力与价值。这篇内容我想谈谈 DevOps 的下半段,通过我们的构建服务稳定性保障实践,利用 SRE 的思想与方法,不断去冲刺稳定性的终极目标:“提升 MTBF(平均故障时间间隔)、降低 MTTR(故障平均修复时间)”,很多小伙伴会有疑问,DevOps 与 SRE 到底是什么样的关系?在 Google
腾讯技术工程官方号
2022/01/17
2.7K0
资源利用率提高67%,腾讯实时风控平台云原生容器化之路
陈建平,后台开发工程师,现就职于TEG安全平台部-业务安全中心,主要负责中心实时策略风控平台开发。 导语 随着部门在业务安全领域的不断拓展,围绕着验证码、金融广告等服务场景,腾讯水滴作为支撑业务安全对抗的实时风控系统,上线的任务实时性要求越来越高,需要支撑的业务请求量也随之增加。对于业务快速上线和资源快速扩缩容的需求,且公司自研上云项目往全面容器化上云方向推进,水滴风控平台开始进行自研上云的改造。本文主要针对腾讯水滴平台上云过程中的实践总结,希望对其他业务迁移上云有一定参考价值。 水滴后台架构 腾讯水滴
腾讯云原生
2021/08/23
1.2K0
全量容器化:腾讯云日志服务CLS的云原生破局之道
数字化转型的本质是一个企业不断打破自我壁垒的过程,这种壁垒的打破通常来源于两个方面,一个是技术重构,另一个是组织重构。本次分享主要侧重的是技术重构方面,将围绕如何实现应用现代化,以业务视角找到实现业务云原生化的破局之道,从而获得更高的业务价值。本文根据腾讯云日志服务研发负责人王国梁在 ArchSummit 2023上海站的演讲内容整理而成。欢迎阅读。
腾讯云开发者
2023/05/12
5250
案例 | 腾讯广告 AMS 的容器化之路
张煜,15年加入腾讯并从事腾讯广告维护工作。20年开始引导腾讯广告技术团队接入公司的TKEx-teg,从业务的日常痛点并结合腾讯云原生特性来完善腾讯广告自有的容器化解决方案。 项目背景 腾讯广告承载了整个腾讯的广告流量,并且接入了外部联盟的请求,在所有流量日益增大的场景下,流量突增后如何快速调配资源甚至自动调度,都成为了广告团队所需要考虑的问题。尤其是今年整体广告架构(投放、播放)的条带化容灾优化,对于按需分配资源、按区域分配资源等功能都有着更强的依赖。在广告内部,播放流系统承载了整个广告播出的功能,这
腾讯云原生
2021/06/25
1.7K0
腾讯云ES Serverless x TKE,分钟级低门槛实现一站式可观测容器日志分析
作为云原生技术的爱好者,笔者活跃在各种开发者社群,这不,又让我发现了一个宝藏:腾讯云Elasticsearch Serverless服务,具备自动弹性、免运维的特性,丰富的产品能力,能分钟级实现容器服务的日志采集与可观测分析。当然,秉持着“不吃独食”的开源心态,为了让大家也能免费体验到这款开箱即用的产品,笔者连着请小编吃了一周的宵夜,最终领取到了免费体验卷➕资源包特惠1元购➕开发者课程(也有免费代金券,爱了!)等满满福利,具体领取方式可见文末相关链接。
腾讯QQ大数据
2024/05/27
2100
腾讯云ES Serverless x TKE,分钟级低门槛实现一站式可观测容器日志分析
开发敏捷高效 | 云原生应用开发与运维新范式
5 月 18 日,腾讯云举办了 Techo Day 腾讯技术开放日,以「开箱吧!腾讯云」为栏目,对外发布和升级了腾讯自研的一系列云原生产品和工具。其中,腾讯云开发者产品中心总经理刘毅围绕“开发敏捷高效”这一话题,分享了关于“云原生应用开发与运维新范式”的主题演讲。本次演讲将为大家分享,腾讯云是如何通过云上开发运维协作能力,支持多职能团队流畅协作,助力企业加速数字化敏捷转型,提升云原生架构的运维效率,受益云原生。
Cloud Studio
2023/05/25
4100
开发敏捷高效 | 云原生应用开发与运维新范式
资源利用率提高67%,腾讯实时风控平台云原生容器化之路
随着部门在业务安全领域的不断拓展,围绕着验证码、金融广告等服务场景,腾讯水滴作为支撑业务安全对抗的实时风控系统,上线的任务实时性要求越来越高,需要支撑的业务请求量也随之增加。对于业务快速上线和资源快速扩缩容的需求,且公司自研上云项目往全面容器化上云方向推进,水滴风控平台开始进行自研上云的改造。本文主要针对腾讯水滴平台上云过程中的实践总结,希望对其他业务迁移上云有一定参考价值。
冬夜先生
2021/09/07
8550
中国工商银行基于eBPF技术的云原生可观测图谱探索与实践
作者 | 中国工商银行金融科技研究院   在互联网金融时代,各大银行业务量呈爆发性增长态势,业务模式更新迭代更加频繁,传统的 IT 架构越来越无法应对新业务形态所带来的巨大冲击与挑战。云原生相关技术使业务应用呈现微服务众多、多语言开发、多通信协议等典型特征,调用链路日益复杂,监控数据爆发性增长,传统监控方式已无法适应云原生场景。 在这个背景下,中国工商银行积极开展云原生可观测图谱的探索和实践,针对可观测体系中的痛难点,通过深入研究内核新技术,进一步完善云原生技术版图。 1 业界云原生可观测体系痛点 中国
深度学习与Python
2023/03/29
5280
中国工商银行基于eBPF技术的云原生可观测图谱探索与实践
8月腾讯云容器产品技术月报|留言抢腾讯定制T恤
2021年8月 VOL:16 腾小云告诉你最前线的产品新特性 总有一款让你心动~ 云说新品 容器产品新特性 8月上新 腾讯云边缘服务TKE@Edge 从中心云管理边缘云资源的容器系统 边缘容器服务(Tencent Kubernetes Engine for Edge,简称 TKE Edge)是腾讯云容器服务推出的用于从中心云管理边缘云资源的容器系统。 ServiceGroup功能增强:DeploymentGrid 支持查看和管理实例,支持对分布在不同地域的应用
腾讯云原生
2021/09/03
1.7K0
QQ浏览器信息流云原生应用之路
宋廷豪,高级工程师,就职于PCG-腾讯看点。主要负责QQ浏览器信息流推荐架构的相关工作。 背景 QQ 浏览器信息流(QB)推荐架构支撑了 QQ 浏览器、快报主 feeds 场景、浮层等信息流卡片实时推荐的能力,架构上不仅仅要支持多业务、多产品,如 QB 、快报、外部合作等,而且需要能够快速支持各种类型场景的能力,如主 TL 、浮层,且能够快速扩展支持垂直频道和 APP 。那么信息流推荐架构需要做到灵活模块化,水平易扩展。 为了做到海量级实时精准推荐,信息流推荐架构划分为了四层:展控层、排序层(精排/粗排
腾讯云原生
2021/08/17
7710
全量容器化:腾讯云日志服务CLS的云原生破局之道
数字化转型的本质是一个企业不断打破自我壁垒的过程,这种壁垒的打破通常来源于两个方面,一个是技术重构,另一个是组织重构。本次分享主要侧重的是技术重构方面,将围绕如何实现应用现代化,以业务视角找到实现业务云原生化的破局之道,从而获得更高的业务价值。本文根据腾讯云日志服务研发负责人王国梁在 ArchSummit 2023 上海站的演讲内容整理而成。 腾讯云 CLS 的业务背景和挑战 腾讯云日志服务(Cloud Log Service,CLS)是腾讯云全自研的一站式、高可靠、高性能日志数据解决方案。支持各种数据源
深度学习与Python
2023/05/09
3870
全量容器化:腾讯云日志服务CLS的云原生破局之道
推荐阅读
相关推荐
2023爱分析・可观测性平台市场厂商评估报告:乘云科技
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验