'network개발'에 해당되는 글 12건

  1. 2022.09.06 ssh 터널링
  2. 2019.12.02 Kafka vs. RabbitMQ
  3. 2017.10.17 Akka & actor
  4. 2017.08.08 Futures transform
  5. 2017.07.21 RxJava
  6. 2017.07.20 Armeria with Thrift
  7. 2017.07.20 CompletableFuture::join (기다려서 답을가져옴) of JAVA
  8. 2017.07.14 Thrift (apache RPC)
  9. 2017.07.05 URL Encoding - apache URLCodec
  10. 2016.11.15 Armeria
  11. 2016.09.26 netty
  12. 2016.09.22 netty활용 사례(netflix zuul)

ssh 터널링

network개발 2022. 9. 6. 16:07

1. 220서버에 들어간 후  100번서버를 localhost:30000으로 매핑. 

ssh -p 33331 ubuntu@220.83.x.x -L 30000:192.168.30.100:30000 

==> ssh -L 8080:원격서버주소:80 중간서버주소
의미:  중간서버에 접속해서  중간서버가 접속가능한 원격서버:80로 접속하는데,   이걸 localhost:8080으로 사용한다는 의미. 
(그외: -L 파라미터는 로컬 포트 포워딩 이외에도 다른 유형의 포트 포워딩을 설정하는 데에도 사용될 수 있습니다. -R 파라미터는 원격 포트 포워딩(remote port forwarding)을 설정하는 데에 사용되며, -D 파라미터는 다이나믹 포트 포워딩(dynamic port forwarding 또는 SOCKS 프록시)을 설정하는 데에 사용됩니다.)


 

2.특정서버의 27017포트를 현서버의 57017로 터널링.


ssh  (-i 등등) -L 57017:localhost:27017 -N centos@private서버.IP

 

3:

ssh -i ~/.ssh/my.pem -t -t -L 57017:localhost:57017 centos@54.xx.xx.xx ssh -i my.pem -L 57017:localhost:27017 -N centos@VPCIP

Posted by yongary
,

Kafka vs. RabbitMQ

network개발 2019. 12. 2. 19:31

둘다 속도가 엄청 좋지만,

kafka와 rabbitMQ는 큰차이점이 있다.  REF
 

1. kafka는 pull 방식, rabbit MQ는 push 방식.

2. rabbitMQ는 in Memory cluster를 많이 쓰지만, kafka는 sequential Disk I/O를 많이 쓰므로
  H/W 비용이 kafka 가 저렴하다.

 

그 외 차이점 몇가지를 표로 보면: 

 

 

Posted by yongary
,

Akka & actor

network개발 2017. 10. 17. 16:46

actor : ref

 

   -actor는 독립적인 경량프로세스이다. (메시지는 큐를 이용해 처리한다)

   -서로 독립적이고 actor간 통신은 비동기로 이루어지기 때문에 multi-thread환경에서 락등이 발생하지 않는다.

   ( scala로 개발되어 있으며, java용 API도 제공한다. )

  


akka

  - actor모델을 통해서 병렬처리를 할 수 있게 해준다.

  - RPC이므로, remote에 있는 actor를 local actor처럼 사용할 수 있다.

  


UntypedActor를 상속받을 경우   onReceive함수를 구현해야 한다.

Actor생성은 Actors.actorOf()로 생성.  

Posted by yongary
,

Futures transform

network개발 2017. 8. 8. 10:01


import static com.spotify.futures.FuturesExtra.syncTransform;


syncTransform:

ListenableFuture<A>를 ListenableFuture<B>로 변환한다. (참고: ListenableFuture는 guava: completion Listener와 executor를 가질 수 있음.)


syncTransform2: 

  ListenableFuture<A>, <B>2개를 하나의 ListenableFuture<C>로 변환한다.




Futures.transform():

이것도 ListenableFuture를 ListenableFuture로 변환하는데... executor를 파라미터로제공.


rxjava.FutureRxInterop.toSingle(): or toMaybe()

각종 Future -> Single로.




Posted by yongary
,

RxJava

network개발 2017. 7. 21. 11:48

(RxJava는  비동기multi-thread 주목적이므로 network개발로 분류)  기초:REF


javadoc 



데이타\처리

CompletableMaybeSingleObservable

Subject(외부에서 데이타주입가능)

NothingO
OneOOOO
MoreOO
UnlimitedOO


<Observable과 Maybe 많이쓸만한 함수: 주로 양쪽에 다 존재>

Observable.subscribe (  Observer 또는 Consumer ) 
                                      Observer는 { onComplete(), onError(),   + onNext(), onSubscribe()  } 

Observable.subscribeOn (데이터주입 Schedule쓰레드)

Observable.observeOn (데이터처리 Schedule쓰레드)

                  .onSubscribe (Cosumer<Disposable {dispose()} >

       (static).defer (Callable supplier )  : .create대신의 공급자.  REF


Flowable.doOnSubscribe ( Consumer<Subscription {cancel(),request(r)   } }   org.reactivestreams?.Subscription

        FlowableOnSubscribe  inteface도 존재.    



Maybe.doOnSuccess( Consumer 

           .doOnComplete ( Action )  ,   .doOnSubscribe( Action

           .doOnError (Consumer 

           .onErrorComplete ( Predicate 
           .timeout ( , , Scheduler  )

(static) .defer ( Callable supplier)  : 공급자  (in study)       

(static) .just ( T )
(static) .error(E) 





Scheduler  & Scheduler.Worker(하나의 thread에서 순차적으로 처리하는 Scheduler)

 ExecutorService exec = Executors.newSingleThreadedExecutor();
                                 .newFixedThreadPool(5)//cpu+1 
 try {
     Scheduler scheduler = Schedulers.from(exec);//parallelization에 최적.
                                     .computation();//cpu+1 계산에적합
                                     .io(); //cache도 해줌.cpu+1
                                     .newThread()//간단
     Flowable.just(1)
        .subscribeOn(scheduler)
        .observeOn(Schedulers.computation())
        .map(v -> v + 1)
        .subscribe(System.out::println); //blockingSubscribe(System.out::println);
 } finally {
     exec.shutdown();
 }


Maybe와 Single의 차이는 complete의 존재여부?   (from REF)

Flowable :  item emit속도( reactive dataflow)가 조절 가능. 



Flowable -> Single<List<T>>  :  toList() 도 좋음.

Posted by yongary
,

Armeria with Thrift

network개발 2017. 7. 20. 16:46

REF  /server-thrift  /client-thrift      (기타  /client-decorator   /server-decorator  /client-custom-http-headers    )




<주요 class 들>  javadoc    pkg:  common.thrift,  server.thrift, client.thrift 


THttpService  :  (Thrift Http Service)


ThriftCompletableFuture  (extends CompletableFuture<java> implements AsyncMethodCallback<thrift> )




Posted by yongary
,

CompletableFuture implements Future, CompletableStage. (그래서 CompletableStage공부도 필요)



<CompleteFuture의 기본 함수들>

.complete(returnValue)

.completeExceptionally(exception)


.thenApply (Func)  : 결과값에 적용

.thenCompose (Func) : future에 적용?  - 이것 자체도 Task가 됨 (333p)

.thenCombine (Func)  :   A task결과와 B task결과를 이용한 연산가능.


.thenAccept(Consumer)



(static) .supplyAsync (  Supplier<R> )   R:ReturnType

첫번째 stream에서 CompletableFuture<String>의 List를 가지고 있지만,

List<String>을 원한다면 기다린 후, Future들에서 값을 가져와야 하는데, 이 일을 해주는게 join이다.

별도의 stream 루프로 처리해야 Parallel처리가 된다.. 안그러면 supplier->join->supplier->join 순차적처리가 됨. 


Posted by yongary
,

Thrift (apache RPC)

network개발 2017. 7. 14. 11:37

 IDL을 정의하고, 여러가지 언어로 skeleton코드변환이 지원된다.

  - Async지원 (TNonblockingServer)

  - multi-thread지원 (ThreadPoolServer)

  - Exception제공 

  


IDL 정의는 REF 참조.

   - namespace는 java의 경우, 그대로 package명으로 변환 됨.

  - service는 상속이 된다. (interface개념)

  - struct는 상속이 안됨.  (class개념) - 단  delegation은 됨(다른 struct포함 가능)

  - list, set, map이 지원 됨. 

  - constant, enum, typedef가 지원되면 typedef는 java의경우 replace형태로 변환된다.



간단한 통신예제 : REF

-  서버가 Async인 경우 client에서 TFramedTransport를 사용한다.  위 사이트에서 NobblockingClient 라는게,

    Nonblocking  서버에 접속하는  BlokcingClient이다. 



Thrift Protocol Stack 그림 - REF



Posted by yongary
,

URL Encoding은 일반적으로 java에서는  URLEncoder.encode()함수를 사용하지만

이러한 방식은 모든 특수기호도 encoding되기 때문에 중요한 


 URL?abc=1&def=2?token=1 

등에서 뒤의 ? 같은것은 리다이렉트 후 파라미터로 쓴다든지 하는 중요한, encode되면 안되는 것이기 때문에

encoding에서 제외해야 한다..


이런저런 percent-character(encoding후 %+로 변환)특수기호를 모두 제외하고 encoding 해주는 라이브러리가 있다.


try {
org.apache.commons.codec.net.URLCodec urlEncoder = new URLCodec();
query = urlEncoder.encode(query);
} catch (EncoderException e) {
}


Posted by yongary
,

Armeria

network개발 2016. 11. 15. 14:58

<주로 사용하는 기능들>

HttpResponse.aggregate() : CompletableFuture로 전환.

예) httpClient.get(uri.getPath()).aggregate()


Decorator: req나 response를 살짝바꾸는 역할. SoC(Seperation of Concern)가 가능.

- req,res가 같을 때는 SimpleDecoratorService를 상속 - req나 res의 type의 바뀔때는 DecoratorService를 상속 - 간단한 decorate()용 lambda도 있음.

<유용한 class - armeria thrift용 개발시에도 사용가능>

com.linecorp.armeria.common.metric.MetricLabel
      - Collector같은 애들에게, 이름을 붙여서, lambda에서 사용시 지정할 수 있다.


common.util.Functions.voidFunction (Consumer or BiConsumer)   : Consumer를 Function으로 변환. 

                                    .compose (Func12, Func23) -> Func(1,3)으로 변환.   그 외에도 각종 compose들 존재. 


common.HttpHeaders;

common.RequestContext;

server.logging.LoggingService;


<기존 netty꺼긴 하지만..유용class>

io.netty.util.AsciiString;


<Connector>

armeria's TomcatService always create a Request/Response instance.
<-> Tomcat's Http11Processor create them only once and this processor instance will be recycled.




REF-github


- 기존의 netty와는 달리 Http2.0을 지원한다.   HTTP2.0-REF
    (기존의 HTTP1 서비스와 호환성도 유지)

- JNI-based socket I/O 

BoringSSL-based TLS connections

- (Apache) Thrift  호환
   THttpClient와 호환. (Thrift-Over-Http)   

    참고:  Thrift - Binary communication을 위한 IDL로서 RPC사용을 위해 facebook에서 개발.

- Java EE Web Application이랑 호환.  (same TCP/IP port)



Posted by yongary
,

netty

network개발 2016. 9. 26. 13:49

netty =  Async전문 java network Library

   - UserGuide(4.0 wiki)  ,  한글번역본

 

   - 3.1 Chapter2 Architecture Overview

 

   - 4.0javadoc   5.0alpha2_javadoc

 

 

netty의 핵심 Interface

 - Channel

 - ChannelFuture

 - ChannelHandler

 - ChannelHandlerContext

 - ChannelPipeline

 - EventLoop

 

 [그 외]

 - ChannelBuffer

 기존 java nio의  ByteBuffer를 쓰지 않고, ChannleBuffer를 이용해
1. flip()호출이 필요없으며 사용자정의 buffer type이 가능하다.

2. zero-copy가 가능하다.(SG-DMA NIC필요) :  zeroCopyRef

zero-copy: disk->커널메모리->유저메모리->커널메모리->NIC  이던것을

               => disk->커널메모리->NIC 방식으로 copy. (File을 socket으로 쏠때 특히 유리)

3. StringBuffer처럼 dynamic Buffer이다.

 - ChannelFactory

NIO-TCP / OIO-TCP / OIO-UDP /Local 통신등을 ChannelFactory선택만으로 쉽게 swithcing가능.

 

기본예제: jdm.kr

 

 

Posted by yongary
,

[Netflix 블로그:  곧 open Source로 공개 예정]

http://techblog.netflix.com/2016/09/zuul-2-netflix-journey-to-asynchronous.html?m=1 

 

 

Posted by yongary
,