Hexo


  • Home

  • Tags

  • Categories

  • Archives

Untitled

Posted on 2019-04-13

image-20190330112343817

同步 :相对IO而言,在同一时间,只能完成一个操作

异步:相对IO而言,在同一时间,同时完成多个操作

阻塞:相对数据而言,判断数据有没有准备好,如果没有准备好,停住不前,一直等待

非阻塞:相对数据而言,不管数据有没有准备好,都会给一个反馈,不至于客户端一直占用资源

万事万物相对论

image-20190330191756240

image-20190330195610172

解决cup空旋,NIOEventLoop run方法中判断是否有任务,然后执行select 方法,selectCnt超过阈值重新创建selector

组件介绍

channel

channelconfig

NioEventloop

bytebuf

Pipline

channelhandler

  1. 创建服务端Channel

    bootstarp.channel()方法设置channelFactory,反射生成NioServerSocketChannel

    newSocket()[通过底层jdk生成socket]

    NioServerSocketChannelConfig()[tcp参数配置类]

    AbstractNioChannel

    ​ configureBlocking(false)阻塞模式

    ​ AbstractChannel()[创建channelid,unsafe,pipline]

  2. 初始化服务端Channel

  3. 注册selector

serverBootstrap.bind()->AbstractBootStrap.doBind()->initAndRegister()->newChannel()

NioEventLoop

默认情况下,Netty服务端起多少线程?何时启动?

Netty是如何解决jdk空轮训bug?

Netty如何保证异步串行无锁化?

ThreadPerTaskExecutor

select()

  1. deadline以及任务穿插逻辑处理
  2. 阻塞式select
  3. 解决空轮询bug

processSelectedKeys()

  1. selectdKeySet优化
  2. processSelectedKeysOptimized()处理IO事件

runAllTasks()

Pipeline

netty是如何判断ChannelHandler类型的?

对于ChannelHandler的添加应该遵循什么样的顺序?

用户手动出发事件传播,不同的触发方式有什么样的区别?

netty是在那里检测有新连接接入的?

新连接是怎么注册到NioEventLoop线程的?

ByteBuf分类

  • pool 和unpool
  • unsafe和非unsafe
  • Heap和Direct

DirectArena分配内存

  • 从对象池里面里面拿到PooledByteBuf进行复用
  • 从缓存上进行内存分配
  • 从内存堆里面进行内存分配

image-20190413162318653

Untitled

Posted on 2019-04-12

image-20190412094342372

Untitled

Posted on 2019-04-08

启动方式

mvn启动,mvn spring-boot:run

jar,war包启动

main方法执行

启动器

@ComponentScan、@EntityScan、@SpringBootApplication、@EnableAutoConfiguration

取消自动配置class

1
2
3
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})

spring.autoconfigure.exclude

Untitled

Posted on 2019-04-01

需要服务组件(SOA):

  1. 注册中心(Eureka server):服务发现

  2. Feign申明接口(契约):定义一种java强类型接口

  3. Feign(服务消费)端:调用Feign申明接口

  4. Feign(服务提供者)端:不一定强制实现Feign申明接口

    ##

整合Ribbon

1.关闭erueka注册

​ 完全关闭 注释@EnableEruekaClient

1
2
3
ribbon:
eureka:
enabled: false
1
2
3
stores:
ribbon:
listOfServers: example.com,google.com

2.实现自定义myruler

3.暴露bean

4.@RibbonClient()

整合Hystrix

Feign 客户端

Ribbon作为负载均衡

Eureka作为注册中心

Zuul作为网关

Securityity 作为安全OAuth2 认证

代理模式设计模式

Posted on 2019-03-31 | In cloud
最近需要从多个excel表里面用各种方式整理一些数据,虽然说原来用过java做这类事情,但是由于最近在学python,所以当然就决定用python尝试一下了。发现python果然简洁很多。这里简单记录一下
Read more »

Untitled

Posted on 2019-03-21

kafka的高吞吐量

  1. 顺序写方式存储数据:频繁的io(网络io和磁盘io)
  2. 批量发送:batch_size/linger.ms
  3. 零拷贝,FileChannel.transferTo

日志策略

日志保留策略

时间和大小

日志压缩策略

消息可靠性机制

消息发送可靠性

消息存储可靠性

Partition的规则

高可靠性的副本 —replication -factor表示副本

Leader选举

  1. 数据同步
  2. leader选举

ISR(副本同步队列)

维护的是有资格的follower节点

  1. 副本的所有节点都必须要和zookeeper保持连接状态
  2. 副本的最后一条信息的offset和leader副本的最后一条消息的offset必须小于阀值,可以设置

HW&LEO

自动提交

手动提交

消息的消费原理

老版本的kafka的offset进度维护在zk上,新版本的kafka是维护在topic上

Random策略

ribbon策略

阻塞非阻塞 相对于数据

同步异步 相对于IO操作

常用命令

创建topic:kafka-topic.sh –create –zookeeper localhost:2181 –replication-factory 3 —topic test

查看topic:kafka-topic.sh –describe –zookeeper localhost:2181 –topic test

产生消息:kafka-console-producer.sh –broker-list localhost:9092 –topic test

消费消息:kafka-console-consumer.sh –bootstrap-server localhost:9092 –from-beginning –topic

Untitled

Posted on 2019-03-20

线程池优化

maxConnections-最大连接数

1.ulimit -a 修改 /etc/security/limits.conf

2.添加maxConnetion的配置

  • 对cup要求高建议不要过多
  • 对io要求高的,建议数量2000
maxThreads-最大线程数500
acceptCount-最大排队数量

jvm优化建议

-server

-Xms 最小内存 建议与-Xmx相同

-Xmx 最大内存 建议到可用内存的80%

-XX:MetaspaceSize 元空间初始值

-XX:MaxMetaspaceSize 元空间最大内存

-XX:MaxNewSize 新生代最大内存

Untitled

Posted on 2019-03-20

NIO

Posted on 2019-03-18 | In java
java NIO APi
Read more »

synchronized底层语义

Posted on 2019-03-15 | In java
synchronized底层语义
Read more »
1…345

Adtle123

47 posts
9 categories
21 tags
© 2020 Adtle123
Powered by Hexo
|
Theme — NexT.Muse v5.1.4