• lfn
    2018-09-04
    我觉得压缩只是序列化的一个原因,但却不是最本质的原因。序列化是为了解决内存中数据结构到字节序列的映射过程中,如何保留各个结构和字段间的关系而生的技术。

    作者回复: 确实,理论上用字符串就也可以,序列化能映射的同时也能压缩数据

    
     44
  • 逍遥子
    2018-09-29
    搞不懂为什么区分长http与socket两种通信,个人理解这两者不是一种概念呀,一个是协议一个是通信基石,http协议访问不也是基于套接字么
     3
     13
  • 萨洪志
    2018-09-04
    沙发,珍惜在车上的时间,😂
     1
     13
  • godtrue
    2019-05-21
    这节原理讲的好,所有的RPC框架应该都是一样的,那为啥还会存在那么多的RPC框架呢?重复造轮子显然会花费人力物力,益处是啥呢?相信老师后面会讲的

    正如许多同学都发现了一样,本节讲的也存在一点点瑕疵。

    我觉得RPC最核心,少了就是不行那部分内容如下:
    1:网络链接,没有这个谈不上R
    2:序列化和反序列化,没有这个服务之间无法交流
    3:本地业务处理,没有这个谈不上PC,当然这个是涉及业务的部分,是独特的,不是框架开发者关心的部分是业务开发关心的部分

    其他:
    1:网络通信协议用什么,是场景而定,不过现在HTTP/TCP已是业界的标准
    2:序列化和反序列化的框架用什么,也是视情况而定,当然功能强、性能好、易使用、易扩展的谁都爱的
    3:压缩和解压缩,这个我认为也是视情况而定的,对性能要求不高完全不用考虑,不过一般都是非常在乎性能的,估计也是有选择的至于选哪一种也是一个视情况而定的权衡问题
    4:就连注册中心,也是个附加的功能,是为了解决提供者和消费者较多且变化频繁,如何发现和路由的问题
    展开
    
     8
  • 波波安
    2018-10-11

    一、gRPC数据传输采用的http2通信协议。连接管理的方式有
    1.GOAWAY帧
    服务端发出这种帧给客户端表示服务端在相关的连接上不再接受任何新流
    2.PING帧
    客户端和服务端均可以发送一个ping帧,对方必须精确回显它们所接收的消息。这可以用来确认连接任然是活动的。
    3.连接失败
      客户端检测到连接失败,所有的调用都会以不可用状态关闭。服务端侧所有已经打开的调用都会被以取消状态关闭。
    二、在多数语言里,gRPC编程接口同时支持同步和异步。
    三、默认使用Protocol buffers协议对数据进行序列化和反序列化
    展开
    
     6
  • 靖远小和尚
    2018-09-04
    老师你好aio是异步阻塞是不是写错了!他应该是异步非阻塞吧!

    作者回复: 写错了,已修改👍

    
     4
  • Hungry
    2018-09-09
    老师,我觉得序列化最大的目的是解决异构系统的数据传输,比如大小端、远端的持久存储;至于不同语言的代码结构上的变量映射,TLV压缩,这些应该是其次的

    作者回复: 嗯,在服务框架里序列号最主要的作用是数据编码

    
     3
  • 九斤鱼
    2018-09-06
    感觉这几篇还是在入门,实战什么时候开始呢?,老师,我更关心的实际操作层面,比如技术栈选型方面,是spring cloud呢还是dubbo还是其他什么,
    系统划分后的工程如何管理,如何部署,如何测试,多容器环境下需要注意什么等等问题,望老师可以在接下来的课程里可以用实际项目解答一下🙏

    作者回复: 可以看下专栏目录,在原理讲完之后开始讲实践

    
     3
  • WolvesLeader
    2018-09-06
    服务A调用B,B调用C,假如B响应较慢,会造成整个调用链挂掉吗?有啥好办法防止这种问题吗?
    
     3
  • Wayne.kun
    2019-04-21
    压缩跟序列化是两回事啊
    
     2
  • kid
    2018-10-11
    我认为序列化主要解决三点:
    1.大小端虚,异构系统网络通信时候的大小端序问题,这点由通信底层库实现
    2.一种协议,在异构语言中进行数据翻译
    3.压缩优化,提高网络通信能力
    
     2
  • Douglas
    2018-10-09
    老师, nio 多路复用io 解决并发连接数问题, 但是,io密集型的应用,业务还是应该 放到单独的线程里面处理的吧,可以创建一个线程池, nio 事件监听连接建立之后, 直接从 业务线程池中获取一个线程来处理业务?
    
     2
  • 云学
    2018-09-05
    这篇文章感觉有些地方不太严谨,序列化是和异构系统有关

    作者回复: 序列化跟异构系统没有直接关联,比如java序列化,主要是为了解决数据编解码的问题

    
     2
  • asdf100
    2018-09-04
    (1)同步阻塞IO(Blocking IO):即传统的IO模型。
    (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。
    (3)IO多路复用(IO Multiplexing):即经典的Reactor设计模式,有时也称为异步阻塞IO,Java中的Selector和Linux中的epoll都是这种模型。高性能并发服务程序使用IO多路复用模型+多线程任务处理的架构。
    (4)异步IO(Asynchronous IO):即经典的Proactor设计模式,也称为异步非阻塞IO。

    上面提到的“同步非阻塞“方式怎么不一样?
    展开

    作者回复: IO多路复用属于同步非阻塞的

    
     2
  • 先来
    2018-09-04
    NIO,AIO描述有问题。
    NIO (New I/O):同时支持阻塞与非阻塞模式,但主要是使用同步非阻塞IO。



    AIO (Asynchronous I/O):异步非阻塞I/O模型。

    作者回复: 抱歉,手误了,已修改👍

    
     2
  • 王鸿运
    2019-01-09
    现在服务端最主流的处理方式应该是nio方式,因为Linux上并没有提供aio接口,epoll也是nio方式
    
     1
  • 衣申人
    2018-09-23
    原来不只是我觉得序列化不是为了压缩的,嘻嘻。我认为序列化和反序列化是解决内存数据到字节流的相互转换的。而压缩不压缩,其实不是必要的。当然序列化后的大小是评估一种序列化方式的优劣因素之一。

    作者回复: 是啊,这里着重强调下压缩比来体现差异

    
     1
  • 思维
    2020-01-21
    老师你好,感觉你讲的重点都是rpc,对于restful,还需要注册中心吗
    
    
  • 哦山丘
    2019-09-28
    TCP可以看下这个https://blog.csdn.net/striveb/article/details/84063712
    
    
  • 王鸿运
    2019-01-09
    序列化的根本原因应该是以一种双方都可以解析方式对数据进行格式化,比如二进制方式和字符串方式。其中c语言的结构体(当然因为不同机器对齐方式不同,需要设置成按1字节填充)和protobuf都是二进制格式,而json和xml都是字符串方式进行序列化。
    因为序列化的主要目的不是压缩,虽然为了节省带宽,提高传输速率的原因,大部分序列化方式都会涉及自己的编码方式对数据进行压缩,如protobuf。
    但这种压缩编码和压缩算法本质上是不同的,protobuf对字符串字段就没办法压缩,还会因为扩展兼容性需要增加字段标签。而压缩主要是通过分析字符串出线频率,通过变长的编码方式对数据重新编码达到压缩目的
    
    
我们在线,来聊聊吧