Netty vs Apache MINA
둘 다 거의 동일한 기능을 제공합니다.고성능 TCP 서버를 개발하려면 어떤 것을 선택해야 합니까?장점과 단점은 무엇입니까?
참조 링크:
미나와 네티는 비슷한 야망을 가지고 있지만, 실제로는 상당히 다르며 여러분은 여러분의 선택을 신중히 고려해야 합니다.미나와 많은 경험을 했고 Netty와 함께 놀 수 있는 시간이 있었다는 점에서 우리는 운이 좋았다.특히 더 깔끔한 API와 훨씬 더 나은 문서가 마음에 들었습니다.서류상으로도 퍼포먼스가 더 좋은 것 같았습니다.더 중요한 것은 Trustin Lee가 우리가 가진 어떤 질문에도 대답할 수 있다는 것을 알고 있었고, 그는 분명히 그렇게 했다.
넷티에선 모든 게 더 쉬웠죠마침표MINA에서 이미 구현했던 기능을 다시 구현하려고 했지만 처음부터 다시 구현했습니다.뛰어난 문서와 예제를 따름으로써 훨씬 적은 코드로 더 많은 기능을 사용할 수 있게 되었습니다.
넷티 파이프라인이 더 잘 작동했어요.모든 것이 핸들러이며 업스트림 이벤트, 다운스트림 이벤트, 둘 다 처리할 것인지, 아니면 더 낮은 수준의 것을 소비할 것인지를 결정하는 것은 MINA보다 다소 간단합니다.디코더를 재생하는 동안 바이트를 게걸스럽게 먹는 것은 거의 즐거웠습니다.또한 파이프라인을 즉시 재구성할 수 있어서 매우 좋았습니다.
그러나 Netty의 가장 큰 매력인 imho는 "커버리지 오브 원"으로 파이프라인 핸들러를 만들 수 있다는 것입니다.이 커버리지 주석에 대해서는 매뉴얼에서 이미 읽어보셨겠지만, 기본적으로는 코드 한 줄로 상태를 알 수 있습니다.세션 맵, 동기화 등의 조작 없이 정규 변수(예: "사용자 이름")를 선언하고 사용할 수 있었습니다.
그러다 바리케이드에 부딪혔어요MINA에는 이미 멀티프로토콜 서버가 있어 애플리케이션 프로토콜이 TCP/IP, HTTP 및 UDP를 통해 실행되었습니다. Netty로 전환했을 때 몇 분 만에 SSL과 HTTPS를 목록에 추가했습니다.지금까지는 좋았지만, UDP에 관해서는 우리가 실수를 했다는 것을 깨달았습니다.미나는 우리가 UDP를 "연결된" 프로토콜로 취급할 수 있다는 점에서 우리에게 매우 친절했다.Netty 아래에는 그런 추상화는 없다.UDP는 connectionless이며 Netty는 UDP를 connectionless로 취급합니다.Netty는 MINA보다 낮은 수준에서 UDP의 커넥션리스 특성을 더 많이 노출합니다.Netty에서 UDP로 할 수 있는 일은 MINA가 제공하는 높은 수준의 추상화에서는 할 수 없지만, 우리가 의지했던 것에서는 할 수 있습니다.
"connected UDP" 래퍼 등을 추가하는 것은 그리 간단하지 않습니다.시간적 제약과 진행하기 위한 최선의 방법은 Netty에 자체 운송 공급자를 구현하는 것이라는 Trustin의 조언에 따라, 우리는 결국 Netty를 포기해야 했습니다.
따라서 이들 간의 차이점을 잘 살펴본 후 까다로운 기능이 예상대로 작동하는지 테스트할 수 있는 단계로 빠르게 이동합니다.만약 당신이 네티가 그 일을 할 것이라고 확신한다면, 나는 주저하지 않고 미나 대신 그것을 할 것이다.만약 당신이 MINA에서 Netty로 이동한다면, 같은 것이 적용되지만, 두 개의 API는 매우 다르므로 Netty를 위한 가상 개서를 고려해야 합니다. 후회하지 않을 것입니다!
업데이트: Netty를 사용하십시오.이제 프로토콜 클라이언트와 서버를 구축하는 데 필요한 모든 기능을 갖춘 성숙한 프로젝트입니다.기업으로부터 지원을 받는 몇몇 적극적인 기부자들과 함께 강력한 커뮤니티가 형성되어 있습니다.그것은 또한 'Netty in Action'이라는 책을 가지고 있다.그것은 이미 많은 유명한 회사들과 프로젝트들에 의해 채택되었다.Netty와는 달리 Apache MINA는 제가 프로젝트를 떠난 이후 유지 보수 모드에 있습니다.
MINA는 복잡성과 상대적으로 낮은 성능을 희생하면서 즉시 사용할 수 있는 기능을 더 많이 가지고 있습니다.이러한 기능 중 일부는 코어에 너무 긴밀하게 통합되어 사용자가 필요하지 않더라도 제거할 수 없습니다.Netty에서 저는 MINA의 알려진 장점을 유지하면서 이러한 디자인 문제에 대처하려고 노력했습니다.
현재, MINA에서 이용할 수 있는 대부분의 기능은 Netty에서도 이용할 수 있습니다.내 생각에 Netty는 MINA를 처음부터 재구축하고 알려진 문제에 대처하기 위해 노력한 결과이기 때문에 Netty는 더 깨끗하고 문서화된 API를 가지고 있다.필수 기능이 누락된 경우 포럼에 의견을 올려주세요.당신의 걱정을 기꺼이 해결해 드리겠습니다.
Netty는 개발 주기가 더 빠릅니다.최신 릴리즈의 출시일을 확인하기만 하면 됩니다.또한, MINA 팀은 API 호환성을 완전히 깨는 MINA 3의 주요 개서를 진행한다는 것을 고려해야 합니다.
퍼포먼스는, Netty(netty-protobuf-rpc) 베이스의 「Google Protobuffer RPC」의 2개의 실장을 테스트했습니다.다른 하나는 mina(protobuf-mina-rpc) 베이스의 실장입니다.결과적으로 Netty는 모든 메시지 크기에서 일관되게 고속(+-10%)이 되었습니다.이것에 의해, Netty Web 사이트의 전체적인 퍼포먼스 주장이 백업 됩니다.이러한 RPC 라이브러리를 사용할 때는 코드로부터 모든 효율을 짜내고 싶기 때문에, Netty에 근거해 protobuf-rpc-pro를 작성하게 되었습니다.과거에 MINA를 사용한 적이 있습니다만, 2.0의 문서에는 큰 구멍이 있어 API의 하위 호환성이 깨지는 것은 큰 마이너스입니다.
MINA와 Netty는 처음에 같은 저자에 의해 설계되고 구축되었습니다.그래서 그들은 서로 매우 유사하다.MINA는 조금 더 높은 레벨로 설계되었으며 Netty는 조금 더 빠릅니다.별로 차이가 없다고 생각합니다만, 기본적인 컨셉은 같습니다.
Netty 사이트에서 몇 가지 성능 보고서를 찾을 수 있습니다.예상대로:-) 최고의 성능을 갖춘 프레임워크로 Netty를 지목하고 있습니다.
Netty를 사용한 적은 없지만, TCP 프로토콜을 구현하기 위해 이미 MINA를 사용했습니다.인코딩과 복호화의 실장은 쉬웠지만 스테이트 머신의 실장은 그리 쉽지 않았다.MINA는 국영 기계를 구현할 때 도움이 되는 몇 가지 수업을 제공하지만, 나는 그것들이 사용하기 어렵다는 것을 알았다.결국 우리는 MINA를 버리고 처음부터 프로토콜을 구현하기로 결정했고, 놀랍게도 더 빠른 서버로 끝이 났습니다.
나는 Netty를 사용한다.
Twitter는 또한 Netty를 새로운 Search System을 구축하기 위해 선택했고, 그것을 3배 더 빠르게 만들었다.
참조: Twitter 검색 속도가 3배 향상되었습니다.
우리는 Mina나 Jetty와 같은 다른 경쟁업체보다 Netty를 선택했습니다. 왜냐하면 Netty는 API가 더 깔끔하고 문서도 더 좋으며, 더 중요한 것은 Twitter의 다른 여러 프로젝트가 이 프레임워크를 사용하고 있기 때문입니다.
저는 MINA를 사용하여 작은 http와 같은 서버를 구축해 본 적이 없습니다.지금까지 가장 큰 문제는 다음과 같습니다.
- "요청"과 "응답"이 메모리에 저장됩니다.사용하는 프로토콜이 http이기 때문에 이것은 문제일 뿐입니다.하지만 이 문제를 해결하려면 당신만의 프로토콜을 사용할 수 있습니다.
- 대용량 파일을 처리하려는 경우 디스크에서 스트림을 제공하는 옵션이 없습니다.자체 프로토콜을 구현하여 다시 문제를 해결할 수 있습니다.
좋은 점:
- 많은 접속을 처리할 수 있다
- 분산형 작업 시스템을 구현하기로 선택한 경우 노드 중 하나가 다운되어 연결이 끊겼을 때 이를 파악하면 다른 노드에서 작업을 재시작할 때 유용합니다.
언급URL : https://stackoverflow.com/questions/1637752/netty-vs-apache-mina
'programing' 카테고리의 다른 글
변수의 메모리 공간(크기)을 판별하는 방법 (0) | 2022.10.18 |
---|---|
클래스를 찾을 수 없음: IntelliJ의 빈 테스트 스위트 (0) | 2022.10.18 |
MySQL DEFAULT vsMariaDB 디폴트 (0) | 2022.10.18 |
Python 개체를 올바르게 정리하려면 어떻게 해야 합니까? (0) | 2022.10.18 |
MariaDB는 MYSQL/Oracle JSON_TAB의 스케일러블 등가값을 가지고 있습니까?LE (0) | 2022.10.08 |