- 博客(19)
- 收藏
- 关注
原创 分布式系统之CAP原则
CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本) 可用性(A):保证每个请求不管成功或者失败都有响应。 分区容错性(P):系统中任意信息的丢失或失败不会影响系统的继续运作。用Redis..
2021-03-09 22:20:40
599
2
原创 三、微服务架构
微服务架构下,服务调用主要依赖下面几个基本组件:服务描述 注册中心 服务框架 服务监控 服务追踪 服务治理服务描述RESTful API XML 配置 IDL 文件注册中心服务提供者在启动时,根据服务发布文件中配置的发布信息向注册中心注册自己的服务。 服务消费者在启动时,根据消费者配置文件中配置的服务信息向注册中心订阅自己所需要的服务。 注册中心返回服务提供者地址列表给服务消费者。 当服务提供者发生变化,比如有节点新增或者销毁,注册中心将变更通知给服务消费者。服务框架.
2021-02-28 14:40:07
125
原创 二、服务化
什么时候进行服务化拆分?单体应用同时进行开发的人员超过 15人,就会遇到上面的问题,这个时候就该考虑进行服务化拆分了。服务化拆分的两种姿势纵向拆分。从业务维度进行拆分。标准是按照业务的关联程度来决定,关联比较密切的业务适合拆分为一个微服务,而功能相对比较独立的业务适合单独拆分为一个微服务。 横向拆分。从公共且独立功能维度拆分。标准是按照是否有公共的被多个其他服务调用,且依赖的资源独立不与其他业务耦合。从单体应用迁移到微服务架构时必将面临也必须解决的问题服务如何定义 服务如何发布和订阅
2021-02-28 14:25:41
175
1
原创 一、什么是微服务
单体应用架构聊微服务之前,先说下什么是单体应用。通过对比,可以更好的发现微服务的价值。常见的单体应用架构有两种:LAMP(Linux + Apache + MySQL + PHP) MVC(Spring + iBatis/Hibernate + Tomcat)在业务规模小的时候,单体应用架构具有以下优点:学习成本低 开发上手快 测试、部署、运维也比较方便随着业务规模的扩大,单体应用框架的缺点就会慢慢暴露出来:部署效率低:依赖多,编译时间长,启动时间长 团队协作开发成本高:主要
2021-02-28 14:18:19
150
2
转载 缓存穿透、缓存击穿、缓存雪崩区别和解决方案
一、缓存处理流程前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。二、缓存穿透描述缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。解决方案接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截; 从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-
2021-02-25 21:24:47
85
原创 如何设计一个秒杀系统
秒杀其实主要解决两个问题,一个是并发读,一个是并发写。并发读解决方案:数据的动静分离 热点的发现与隔离 请求的削峰与分层过滤 服务端的极致优化 在服务端对秒杀商品进行本地缓存 增加系统限流保护,防止最坏情况发生架构是一种平衡的艺术,而最好的架构一旦脱离了它所适应的场景,一切都将是空谈。架构原则:“4 要 1 不要”1.数据要尽量少所谓“数据要尽量少”,首先是指用户请求的数据能少就少。请求的数据包括上传给系统的数据和系统返回给用户的数据(通常就是网页)。为啥“数据要尽量少”呢?
2021-02-25 21:17:10
120
原创 Kafka核心技术与实战
简介Apache Kafka 是一款开源的消息引擎系统。削峰填谷术语Broker: kafka集群中包含一个或者多个服务实例,这种服务实例被称为Broker Topic: 每条发布到kafka集群的消息都有一个类别,这个类别就叫做Topic Partition: Partition是一个物理上的概念,每个Topic包含一个或者多个Partition Producer: 负责发布消息到kafka的Broker中。 Consumer: 消息消费者,向kafka的broker中读取消息的客
2021-02-24 21:34:16
337
原创 FFmpeg源码分析:AVInputFormat结构体
一个真正快乐的人,是能够享受他的创造的人。那些像海绵一样,只取不予的人,只会失去快乐。AVInputFormat结构体用来表示输入文件容器格式,着重于功能函数,一个文件容器格式对应着一个AVInputFormat结构。通过以下两种方式进行设置:当通过avformat_open_input函数设置时,需要对filename的值进行探测 如果上一步骤探测失败,则会对filename指定的文件或协议进行探测 也可以通过av_find_input_format函数获取输入文件容器格式举例如下:.
2020-12-16 10:31:05
335
原创 FFmpeg源码分析:avio_open2
一个真正快乐的人,是能够享受他的创造的人。那些像海绵一样,只取不予的人,只会失去快乐。avio_open2函数是用来打开输入输出文件,包括普通的文件、rtmp、udp、https等。ffmpeg用来管理输入输出文件数据结构是AVIOContext。一、函数参数解析int avio_open2(AVIOContext **s, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDicti.
2020-11-30 22:07:31
904
原创 FFmpeg源码分析:AVCodecContext结构体
当你和别人相处的时候,也应该像你在读书一样,一定要集中精力。读书的时候,要将全部的精力都集中到书本的内容当中;与别人相处的时候,将注意力倾注到自己的所见所闻里,这一点是很重要的。AVCodecContext结构体主要用来对音视频数据进行编解码,一般与AVFormatContext结构结合使用。...
2020-11-27 22:06:08
127
原创 FFmpeg源码分析:AVFormatContext结构体
伟大人物所达到和保持的高度,并非是心血来潮一蹴而就,而是在晚上当同伴都入睡的时候,他们正努力向上攀
2020-11-19 17:11:17
2132
原创 FFmpeg源码分析: av_read_frame
目录函数声明函数声明/** * Return the next frame of a stream. * This function returns what is stored in the file, and does not validate * that what is there are valid frames for the decoder. It will split what is * stored in the file into frames and ret.
2020-11-19 17:10:14
273
原创 FFmpeg实战:从设备采集音频
//// Created by wiggers on 2020/11/14.//#include <libavutil/log.h>#include <libavformat/avformat.h>#include <libavdevice/avdevice.h>#include <stdio.h>#include <assert.h>static void simple_capture_audio(){ /* .
2020-11-19 10:34:05
574
原创 FFmpeg源码分析:av_packet_alloc
函数声明/** * Allocate an AVPacket and set its fields to default values. The resulting * struct must be freed using av_packet_free(). * 分配AVPacket内存并设置成员变量的默认值。该函数的返回值必须通过av_packet_free进行释放。 * * @return An AVPacket filled with default values or NULL o
2020-11-18 23:45:42
1134
原创 FFmpeg源码分析:avformat_find_stream_info
函数声明/** * Read packets of a media file to get stream information. This * is useful for file formats with no headers such as MPEG. This * function also computes the real framerate in case of MPEG-2 repeat * frame mode. * The logical file position is
2020-11-18 23:37:28
268
1
原创 FFmpeg源码分析:avformat_alloc_context
函数声明/** * Allocate an AVFormatContext. * avformat_free_context() can be used to free the context and everything * allocated by the framework within it. * 分配一个AVFormatContext结构。 * avformat_free_context()可以用来释放该Context,并且会释放由框架分配的所有内存。 */AVFormatCo
2020-11-18 23:20:35
714
原创 FFmpeg源码分析:avformat_open_input
函数原型/** * 打开输入流并读取文件头。此时解码器还未打开。 * 该流必须通过avformat_close_input()函数关闭。 * * @param ps 用户提供的指针,类型为AVFormatContext,可以事先通过avformat_alloc_context()进行分配。 * 如果该ps指向的值为NULL,则avformat_open_input会调用avformat_alloc_context()进行分配。 * 注意当avform
2020-11-18 19:16:00
842
原创 FFmpeg源码分析:av_find_input_format
函数原型/** * Find AVInputFormat based on the short name of the input format. * 根据输入格式的短名称查找AVInputFormat。 */ff_const59 AVInputFormat *av_find_input_format(const char *short_name)函数定义ff_const59 AVInputFormat *av_find_input_format(const char *short_
2020-11-18 19:00:02
2098
原创 FFmpeg源码分析:avdevice_register_all
使用ffmpeg+SDL实现简单播放器ffmpeg版本: v4.3.1SDL版本: v2.0.12系列文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、安装ffmpeg示例:pandas 是基于NumPy
2020-10-15 10:42:35
627
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人