Struct resume::work::Rambler::News

source ·
pub struct News;
Expand description

One of the biggest news aggregator and news platform in Russia.

When I started on this project (2017) it was mostly python applications with classical legacy project problems:

  • High costs of development and support
  • High latency on web components (API and front-end)
  • The low actuality of news (mostly by long caching)

Trait Implementations§

source§

impl Actix for News

Project was built on top of Actix actor and web framework.

source§

impl Celery for News

Old DS workers based on Celery and Python 2.

source§

impl<'period, 'f2017, 't2018, Language> Developer<Language> for &'period Newswhere Language: Python, 'period: 'f2017 + 't2018,

Python developer in Rambler News

Infrastructure migration to k8s and refactoring deployment process. Migration legacy codebase to python 3.

source§

impl GRPC for News

RPC implementation based on Tonic for Event Sourcing.

source§

impl Postgresql for News

Main data storage.

source§

impl Python for News

Main language for Rambler/News up to 2020.

DS tasks such as classification, clusterisation and etc. are written in Python with self-made actor framework built on top of RabbitMQ and Protobuf.

source§

impl Rust for News

Current realisation of the core API rewritten completely in Rust.

source§

impl<'period, 'f2018, 't2022, Team> TeamLead<Team> for &'period Newswhere Team: Rust + Python, 'period: 'f2018 + 't2022,

Head of Media development team.

Since 2018, I have become the head of the development team. With a team we were able to mostly solve all the problems described:

  • We are rewriting all Aggregator parts with actual ML algorithms and technical stack
  • Rewrite core API with Rust.
  • Rewrite parsing component with Rust
  • Remove all caching layers instead of one
  • Latency has decreased by about 10 times
  • Incidents count has decreased by about 10 times
  • Resource costs have decreased by about 20 times
  • Re-select and rewrite all DS workers
    Btw in the development team’s area of responsibility includes such projects as MediaUp, Horoscopes, Weather, and some others.
source§

impl Tokio for News

Project was built on top of tokio and Tonic for RPC and Event Sourcing services.

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.