혼자 새로운 서비스를 만들려고 하는데
Serverless vs Serverful 사이에서 고민이 됬음.
둘 다 많이 다뤄본 고수 개발자는 알겠지만 나같은 초보 개발자는 어떤 방식이 옮은지 알 수가 없었음 ㅜㅜ
그래서 레딧 뒤적거리다가 버클리대에서 2019년에 쓴 논문 하나를 읽게 됨.
서버리스의 역사 부터 장단점. 그리고 문제 해결법까지 자세히 적은 좋은 글이었음
나 같은 초보도 서버에 대해 손쉽게 이해할 수 있을정도로 ㅇㅇ
결론부터 말하자면 '서버리스를 쓸 수 있는 환경'이라면 서버리스 >>> 서버풀 이란 답이 나옴.
그리고 1인 수준에서 구축하는 거의 모든 앱은 서버리스 환경에 어울린다.
서버리스로 극복할 수 없는 환경은 대용량 데이터, 분산컴퓨팅, 60초 이상의 수행시간이 필요한 환경이고.
그 외의 환경에서는 서버리스가 비용 및 성능면에서 더 좋다고 말함.
(그리고 서버리스가 득세하기 힘든 환경은 추후에 BaaS의 형테로 제공될거라고 주장함)
글을 다 정리하는 건 힘들고 가장 핵심적이었던 '서버리스의 오해와 문제' 단락만 짧게 번역해봄
1. 오해: 서버리스는 서버풀 보다 더 비싸다
- ㄴㄴ 실제로 조사해보면 작동 안하는 유휴시간에 비용지출이 없는 것 떄문에 훨씬 쌈.
2. 문제: 서버리스 비용은 예측 불가능하다.
- 회사는 서버비용을 고정지출로 계산하고 싶기 떄문에 해당 파트는 문제가 될 수 있는 것 맞음.
3. 오해: 서버리스의 함수는 하이레벨 언어로 작성되기 때문에 벤더 락인 효과가 더 적을 수 있지 않을까?
- ㄴㄴ 함수의 작동 조건과 성능이 클라우드마다 다르기 때문에 생각보다 옮기기 힘듬. 즉 락인 효과 더 큰거 맞음
- 추가로 서버리스를 쓰는 앱은 다른 baas를 같이 혼용하는 경우가 흔하다. (dynamodb, s3등). -> 락인효과 더 커짐
4. 오해: 서버리스는 로우 레이턴시 환경에서 쓰기 힘듬
- ㄴㄴ 콜드스타트 아니면 속도 똑같음. 콜드스타트는 함수를 정기적으로 실행하는 것으로 상당부분 해결 가능함.
5. elastic이 붙은 서비스들이 서버리스랑 비슷한 것 같음.
- 비슷하지만 부족함. 서버리스는 사용하지 않을 경우 가격이 0일 수 있어야함. 또한 확장과 축소가 극단적으로 자유로워야 하는데 elastic이 붙은 서비스들 중 다수가 그정도 아님.
30쪽 내외의 짧은 글이지만 굉장히 알찼으니까 한번 읽어보기 바람
https://www2.eecs.berkeley.edu/Pubs/TechRpts/2019/EECS-2019-3.pdf
저런 문제들을 10년 넘게 고민하고 서비스해온 AWS가 작년 ATC에 논문을 냈고, best paper award를 받았음. 읽어보시면 도움이 될 듯
On-demand container loading in AWS Lambda [ATC '23](
https://www.usenix.org/system/files/atc23-brooker.pdf)
고수추
직접 구축해보면 저런 상황 나오기가 힘들다는걸 알게됨.
서버리스를 쓸 수 있는 환경이 잘 안나옴?
서버풀이라는말은 태어나서 첨듣네
난 statefull이랑 stateless로 알고있었는데 - dc App
이거 고민할 시간에 어뎁터 적당한거 박아놓고 대충 만만한걸로 먼저 디플로이 해놓고 나중에 다시 바꿔 - dc App
뭘 고르던 구현에 영향 주는일 거의 없고 요청 받는 부분만 달라지는거라 일단 만들고 바꾸면댐 - dc App
서버리스람다 같은것에서 고민해볼건 영속성 계층, 라우팅, 인증 이런 류만 잘 풀리면 그냥써도 문제없을 것 같은데 그게 아니면 좀 운영이 애매함
콜드스타트 싫다고 안 꺼지게 하면 그게 vm instance랑 무슨 차이지
람다같은거 끄적이면 몰라도 다른건 걍 서버에 돌리는게 구현이 훨 편함